使用for循环条件语句的Python分区字符串列表

时间:2019-02-19 13:33:21

标签: python python-3.x

我想删除某个字符串之后的所有字母,例如,删除HelloHimy_list之后的单词(就像下面的代码一样),并返回一个新的清除列表。

我尝试将内部分区用于循环条件语句,但它只返回了原始列表。是否可以使用分区或其他方法来修改my_list?这是我当前的代码:

my_list = ['Say Hello to Python', 'Say Hi to HiPython', 'Goodbye Python']
for i in range(len(my_list)):
    if 'Hello' in my_list[i] == True:
        my_list[i] = my_list[i].partition('Hello')[0]
    if 'Hi' in my_list[i] == True:
        my_list[i] = my_list[i].partition('Hi')[0]

预期: ['Say ', 'Say ', 'Goodbye Python']

实际输出: ['Hello Python', 'HiPython', 'Goodbye Python']

6 个答案:

答案 0 :(得分:2)

您可以使用split()方法。我更新了您可以尝试的所有内容。

my_list = ['Say Hello to Python', 'Say Hi to HiPython', 'Goodbye Python']
for i in range(len(my_list)):
    if 'Hello' in my_list[i]:
        delete = 'Hello'
        get = my_list[i].split(delete, 1)[0]
        my_list[i] = get
    if 'Hi' in my_list[i]:
        delete = 'Hi'
        get = my_list[i].split(delete, 1)[0]
        my_list[i] = get


print(my_list)

输出:

['Say ', 'Say ', 'Goodbye Python']

答案 1 :(得分:1)

if 'Hello' in my_list[i] == True:

检查单词Hello是否在布尔值my_list[i] == True中-显然不是这种情况。
试试

if 'Hello' in my_list[i]:

,并相应地使用'Hi'

答案 2 :(得分:0)

1。您的条件不正确
2.使用正确的if / else语句

my_list = ['Say Hello to Python', 'Say Hi to HiPython', 'Goodbye Python']
new_list=[]
for i in range(len(my_list)):
    if 'Hello' in my_list[i]:
        print(my_list[i].partition('Hello'))
        new_list.append(my_list[i].partition('Hello')[0])
    elif 'Hi' in my_list[i]:
        print(my_list[i].partition('Hi'))
        new_list.append(my_list[i].partition('Hi')[0])
    else:
        new_list.append(my_list[i])

new_list

['Say ', 'Say ', 'Goodbye Python']

答案 3 :(得分:0)

我认为这是一种干净且相当Pythonic的方法。轻松添加要删除的其他任何字符串。

def fix_list(list_of_strings):

    for item in list_of_strings:
        if 'Hello' in item:
            yield item.replace('Hello', '')
        elif 'Hi' in item:
            yield item.replace('Hi', '')
        else:
            yield item


def main():

    my_list = ['Say Hello to Python', 'Say Hi to HiPython', 'Goodbye Python']

    return list(fix_list(my_list))

答案 4 :(得分:0)

我用更多的Pythonic代码编写了此代码,我们在其中直接遍历您列表中的项目,而不是遍历整个列表范围。无需就地编辑列表,而是创建一个新列表。我更喜欢这种方法,因为它可以减少我的体验中令人困惑的结果。 另一点:在句子中同时出现“ Hello”和“ Hi”的情况下,请谨慎选择要发生的事情。您尚未指定在这种情况下应该发生的情况。

my_list = ['Say Hello to Python', 'Say Hi to Python', 'Goodbye Python']
output_list = []
for sentence in my_list:
    search_word = ''
    if 'Hello' in sentence:
        search_word = 'Hello'
    if 'Hi' in sentence:
        search_word = 'Hi'
    if not search_word:
        output_list.append(sentence)
        continue

    # get the index of the last bit of the string
    # you will keep and split on that
    index = sentence.find(sentence.partition(search_word)[1])
    output_list.append(sentence[:index])
print(output_list)
>>> ['Say ', 'Say ', 'Goodbye Python']

答案 5 :(得分:0)

您也可以使用位置索引来实现此目的。但是首先,您需要找到要搜索的单词在给定字符串上的位置。您可以使用find方法。然后,您可以从要搜索的单词的开头给出的字符串的开头到最终位置检索字符串。我选择将值存储在新列表中。

my_list = ['Say Hello to Python', 'Say Hi to HiPython', 'Goodbye Python']
result = []
a, b = ("Hello", "Hi")
for x in my_list:
    if a in x:
        result.append(x[0:x.find(a)])
    elif b in x:
        result.append(x[0:x.find(b)])
    else:
        result.append(x)
print(result)