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,如果这有什么不同的话。
答案 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']