繁体   English   中英

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

[英]Checking if an item in a list is in another 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,那有什么不同。

只需使用集

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

或者对于此特定示例,OP可以使用

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

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

在键列表中,单词之后有空格,例如“ Whelk”,但在值中则没有“ Whelk”。 'Whelk'和'Whelk'是两个不同的词,因此当您编写时

if item not in keys:

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

我认为这是您想要的:

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

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

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)

这将为您提供相同的输出:

根据您的问题,以下内容将为您提供帮助

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

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

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

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

answer_list = [i for i in values if i not in updated_keys]
list(set(values) - set([i.strip() for i in keys]))

您首先需要使用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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM