我正在尝试遍历两个列表,并且只想在上一个列表中不存在的情况下打印一个项目。我将通过非常大的文件执行此操作,因此不希望将它们存储在内存中,如列表或字典。有没有办法可以在不存储到列表的情况下执行此操作?我已经尝试了以下作为样本但没有获得所需的输出。任何帮助表示赞赏。
list_1 ='''apple
pear
orange
kiwi
strawberry
banana'''
list_2 = '''kiwi
melon
grape
pear'''
for fruit_2 in list_2.splitlines():
for fruit_1 in list_1.splitlines():
if fruit_1 not in fruit_2:
print(fruit_1)
输出:
apple
pear
orange
strawberry
banana
apple
pear
orange
kiwi
strawberry
banana
apple
pear
orange
kiwi
strawberry
banana
apple
orange
kiwi
strawberry
banana
期望的输出(不在列表2中的项目):
apple
orange
strawberry
banana
答案 0 :(得分:0)
你可以试试这个:
with open("list1") as f1,open("list2") as f2:
for line1 in f1:
for line2 in f2:
if line1 not in line2.strip():
print line1
尝试将此文件拆分为list1
和list2
,然后逐行阅读。
上面的代码会在内存中读取一行,这意味着它不会占用太多内存。它会在完成后关闭文件。
答案 1 :(得分:0)
此脚本
list_1 = ['apple',
'pear',
'orange',
'kiwi',
'strawberry',
'banana']
list_2 = ['kiwi',
'melon',
'grape',
'pear']
for fruit_1 in list_1:
# reset iterator for list_2 at this line
# ...........
if all(fruit_1 not in fruit_2 for fruit_2 in list_2):
print(fruit_1)
输出:
apple
orange
strawberry
banana
由于文件非常大,您可能需要在list_2
语句之后/之前重置if
的迭代器。
答案 2 :(得分:0)
使用字符串中的find
函数进行检查,如下所示:
for fruit_1 in list_1.splitlines():
if list_2.find(fruit_1) == -1:
print(fruit_1)
答案 3 :(得分:0)
您的代码无效的原因是外部循环从list_2
一次选择一个项目。然后内部循环遍历list_1
中的每个值,并将其与list_2
中的一个项进行比较。这会导致内部循环在每次执行时打印list_2
中所有水果的全部(或者只有一个,如果它在list_1
中)。
这是一个简单的解决方案:
fruit_2_list = list_2.splitlines()
for fruit_1 in list_1.splitlines():
if fruit_1 not in fruit_2_list:
print(fruit_1)
这使用in
运算符检查list_1
中list_2
中list_1
中所有项目的每个项目。它只会遍历.blog img {
vertical-align: middle;
float:left;
width:50px;
height:50px;
margin-right: 15px;
}
.blog p {
display: inline;
}
并生成您想要的结果。
答案 4 :(得分:0)
据我所知,为了演示而将示例转换为列表没有任何害处,所以我已经这样做了,以使它更清晰一些。当然,您不必在程序中使用列表。此解决方案使用Python的for ... else
语句。
list_1 = [
apple,
pear,
orange,
kiwi,
strawberry,
banana
]
list_2 = [
kiwi,
melon,
grape,
pear
]
for item_1 in list_1:
for item_2 in list_2:
if item_1 == item_2:
break
else:
print(item_1)