[英]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.