检查列表中的项目是否在另一个列表中

时间:2015-12-01 05:31:03

标签: python list

values = ['Limpets', 'Mussels', 'Phytoplankton', 'Zooplankton', 'Prawn', 'Crab', 'Whelk', 'Seaweed']

keys = ['Whelk ', 'Mussels ', 'Bird ', 'Prawn ', 'Fish ', 'Zooplankton ', 'Crab ', 'Lobster ', 'Limpets ']

我想要的是不在键中的值中的项目。我试过把它写成:

for item in values:
   if item not in keys:
       print(item)

应该得到的答案是

phytoplankton
seaweed

但我得到的是:

Phytoplankton
Seaweed
Limpets
Mussels
Crab
Whelk
Prawn
Zooplankton

我还尝试将项目存储在列表中,然后打印该列表,但我尝试过的任何内容都不适用于我。我看到了一些使用列表理解的答案,但是我正在学习一门入门课程,所以我得到的就是循环......我使用的是python3.5,如果这有什么不同的话。

8 个答案:

答案 0 :(得分:5)

只需使用套件

set(values).difference(set(keys))

或者对于这个特定的例子,OP可以使用

set(values).difference(set([i.strip() for i in keys]))

由于keys列表的每个项目都有一个尾随空格,因此我们需要清除它。

答案 1 :(得分:3)

在键列表中,您在单词后面有空格,例如'Whelk',但在值中您没有f.e'Wirlk'。 'Whelk'和'Whelk'是两个不同的词,所以当你写

if item not in keys:

它返回true。你应该首先删除键列表中的单词之后的空格,然后尝试你的代码示例

答案 2 :(得分:2)

我认为这就是你想要的:

[x for x in values if x not in keys]

答案 3 :(得分:2)

您的代码是正确的。问题是,列表中的每个字符串在末尾都包含一个空格。这段代码:

values = ['Limpets', 'Mussels', 'Phytoplankton', 'Zooplankton', 'Prawn', 'Crab', 'Whelk', 'Seaweed']

keys = ['Whelk', 'Mussels', 'Bird', 'Prawn', 'Fish', 'Zooplankton', 'Crab', 'Lobster', 'Limpets']

for item in values:
   if item not in keys:
       print(item)

生成此输出:

浮游植物
海藻

如果由于某种原因你无法修改的内容,你可以修改你的循环:

for item in values:
   if item + " " not in keys:
       print(item)

会给你相同的输出:

浮游植物
海藻

答案 4 :(得分:1)

根据你的问题,下面的内容将有所帮助

[i for i in keys if i.strip() not in values]

此外,您可以在python中使用set进行更多此类评估

答案 5 :(得分:1)

它将返回整个列表,因为您的键在每个字符串中包含额外的空格,因此您必须先删除空格。

updated_keys = [i.strip() for i in keys]

answer_list = [i for i in values if i not in updated_keys]

答案 6 :(得分:1)

list(set(values) - set([i.strip() for i in keys]))

答案 7 :(得分:0)

您首先需要使用map(lambda x : x.strip(),keys),然后使用reduce或任何其他解决方案

values = ['Limpets', 'Mussels', 'Phytoplankton', 'Zooplankton', 'Prawn', 'Crab', 'Whelk', 'Seaweed']
keys = ['Whelk ', 'Mussels ', 'Bird ', 'Prawn ', 'Fish ', 'Zooplankton ', 'Crab ', 'Lobster ', 'Limpets ']
map(lambda x : x.strip(),keys)
reduce(lambda x , y : x+ [y] if y.strip() not in keys else x, values,[])

O / P:['Phytoplankton', 'Seaweed']