从for循环输出创建列表[Python]

从for循环输出创建列表[Python],python,list,python-3.x,for-loop,Python,List,Python 3.x,For Loop,我有以下代码: with open("text2.txt", 'r') as file: for cats in file: if "blue" in cats: print (cats) text2.txt文件如下所示: blue cat 3 blue cat 2 blue cat 5 red cat 2 green cat 2 blue cat 3 yellow cat 5 ["blue cat 3, blue

我有以下代码:

with open("text2.txt", 'r') as file:        
    for cats in file:
        if "blue" in cats: 
            print (cats)
text2.txt文件如下所示:

blue cat 3 
blue cat 2 
blue cat 5 
red cat 2 
green cat 2 
blue cat 3
yellow cat 5 
["blue cat 3, blue cat 2, blue cat 5, blue cat 3"] 
我想得到一个如下所示的列表:

blue cat 3 
blue cat 2 
blue cat 5 
red cat 2 
green cat 2 
blue cat 3
yellow cat 5 
["blue cat 3, blue cat 2, blue cat 5, blue cat 3"] 
手工制作列表不是我的选择,我正在处理一个大文件,所以这不是解决我问题的方法:

mylist = ["blue cat 3, blue cat 2, blue cat 5, blue cat 3"]

尝试创建一个数组,然后将要添加的值附加到该数组:

blue_cats=[]
with open("text2.txt", 'r') as file:        
    for cats in file:
        if "blue" in cats: 
            blue_cats.append(cats.strip())
print(blue_cats)

尝试创建一个数组,然后将要添加的值附加到该数组:

blue_cats=[]
with open("text2.txt", 'r') as file:        
    for cats in file:
        if "blue" in cats: 
            blue_cats.append(cats.strip())
print(blue_cats)

这可以很容易地通过列表理解来完成。您只是在文件中的每一行上循环,只保留其中包含“蓝色”的行:

with open("text2.txt", 'r') as file:
    n = [i.strip() for i in file if 'blue' in i.lower()]

print(n)
将输出:

['blue cat 3', 'blue cat 2', 'blue cat 5', 'blue cat 3']
要详细介绍上述工作原理并将其与您的代码关联,请执行以下操作:

事实上,你离得并不远。解决方案中唯一缺少的是实际创建一个列表并附加到其中:

因此,创建一个空列表:

blue_cats = []
然后保持你的代码不变,但是改变打印猫以附加到你的代码中。注意我用的是脱衣舞。这将删除保留在字符串中的\n,因为它位于文件中,您可能不需要它。最后,作为确保始终找到“蓝色”的额外奖励,您希望通过在要搜索的字符串上使用lower强制使用小写:

blue_cats = []
with open("text2.txt", 'r') as file:        
    for cats in file:
        if "blue" in cats.lower(): 
            blue_cats.append(cats.strip())

这可以很容易地通过列表理解来完成。您只是在文件中的每一行上循环,只保留其中包含“蓝色”的行:

with open("text2.txt", 'r') as file:
    n = [i.strip() for i in file if 'blue' in i.lower()]

print(n)
将输出:

['blue cat 3', 'blue cat 2', 'blue cat 5', 'blue cat 3']
要详细介绍上述工作原理并将其与您的代码关联,请执行以下操作:

事实上,你离得并不远。解决方案中唯一缺少的是实际创建一个列表并附加到其中:

因此,创建一个空列表:

blue_cats = []
然后保持你的代码不变,但是改变打印猫以附加到你的代码中。注意我用的是脱衣舞。这将删除保留在字符串中的\n,因为它位于文件中,您可能不需要它。最后,作为确保始终找到“蓝色”的额外奖励,您希望通过在要搜索的字符串上使用lower强制使用小写:

blue_cats = []
with open("text2.txt", 'r') as file:        
    for cats in file:
        if "blue" in cats.lower(): 
            blue_cats.append(cats.strip())

如果可以编辑上面介绍的代码,只需添加一个列表即可

blue_cats = []
with open("text2.txt", 'r') as file:        
    for cats in file:
        if "blue" in cats: 
            blue_cats.append(cats)

如果可以编辑上面介绍的代码,只需添加一个列表即可

blue_cats = []
with open("text2.txt", 'r') as file:        
    for cats in file:
        if "blue" in cats: 
            blue_cats.append(cats)

以下方法应有助于:

with open("text2.txt", 'r') as f_input:
    output = [row.strip() for row in f_input if row.startswith("blue cat")]

print(', '.join(output))
这将打印:

blue cat 2, blue cat 5, blue cat 3

以下方法应有助于:

with open("text2.txt", 'r') as f_input:
    output = [row.strip() for row in f_input if row.startswith("blue cat")]

print(', '.join(output))
这将打印:

blue cat 2, blue cat 5, blue cat 3

从技术上讲,到目前为止,没有一个答案会产生所要求的输出

OP要求输出如下:

["blue cat 3, blue cat 2, blue cat 5, blue cat 3"] 
它是一个单元素列表,包含逗号和空格分隔的字符串,仅包含输入文件中的“blue cats”

我怀疑这是一个打字错误,也许不是

为了正确回答这个问题,这里有一些代码:

with open("text2.txt", 'r', encoding='utf_8') as openfile:
    cats = [line.strip() for line in openfile if 'blue' in line.lower()]
mystring = ""
for cat in cats:
    mystring += ', ' + cat
mylist = []
mylist.append (mystring[2:])

mylist现在包含请求的输出

从技术上讲,到目前为止,所有答案都不会产生请求的输出

OP要求输出如下:

["blue cat 3, blue cat 2, blue cat 5, blue cat 3"] 
它是一个单元素列表,包含逗号和空格分隔的字符串,仅包含输入文件中的“blue cats”

我怀疑这是一个打字错误,也许不是

为了正确回答这个问题,这里有一些代码:

with open("text2.txt", 'r', encoding='utf_8') as openfile:
    cats = [line.strip() for line in openfile if 'blue' in line.lower()]
mystring = ""
for cat in cats:
    mystring += ', ' + cat
mylist = []
mylist.append (mystring[2:])

mylist现在包含请求的输出

您只想要蓝色的猫吗?我只想要蓝色的猫。在迭代行时,您不需要附加到列表中吗?如果在其余的行下面还有另一个蓝色的猫呢。你想包括所有的蓝猫行,还是只包括那些出现在彼此正上方的行。我不知道append是如何工作的,我是一个新手。你只想要蓝猫吗?我只想要蓝猫。你不想在迭代这些行时将其添加到列表中吗?如果在其余行的下面还有另一个蓝猫呢。你想包括所有的蓝猫行,还是只包括那些出现在彼此正上方的行。我不知道附加是如何工作的,我是一个新手。列表理解比附加更快。如果你想以两种方式中最有效的方式回答问题,请使用答案的上半部分。@JohnSmith这是正确的。答案的第二部分是让OP更深入地了解正在发生的事情,以及他们需要在代码中修改什么才能使其正常工作。列表理解比附加更快。如果你想以两种方式中最有效的方式回答问题,请使用答案的上半部分。@JohnSmith这是正确的。答案的第二部分是让OP更深入地了解正在发生的事情,以及他们需要在代码中修改什么才能使其正常工作。