Python迭代列表时检查项目不在行中

时间:2017-03-17 01:14:23

标签: python iterator iteration

我正在尝试遍历两个列表,并且只想在上一个列表中不存在的情况下打印一个项目。我将通过非常大的文件执行此操作,因此不希望将它们存储在内存中,如列表或字典。有没有办法可以在不存储到列表的情况下执行此操作?我已经尝试了以下作为样本但没有获得所需的输出。任何帮助表示赞赏。

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

5 个答案:

答案 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

尝试将此文件拆分为list1list2,然后逐行阅读。 上面的代码会在内存中读取一行,这意味着它不会占用太多内存。它会在完成后关闭文件。

答案 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_1list_2list_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)