我有以下列表和嵌套列表:
first_var = ["id1","id2","id3"]
second_var = [("id1","name1"),("id2","name2"),("id3","name3"),("id4","name4"),]
我想检查“second_var”中不存在于“first_var”中的每个第一个元素,并打印“second_var”中的第二个元素。
我的代码是:
for x in [x[0] for x in second_var]:
if x not in first_var:
print(...)
现在,如果我执行 print(x),它会打印:
id4
但我需要它来打印 name4
我怎样才能做到这一点?
请您参考如下方法:
您的代码的问题是您没有迭代原始列表。您只是迭代列表中每个元组的第一个条目。
这是调整代码的方式:
first_var = ["id1","id2","id3"]
second_var = [("id1","name1"),("id2","name2"),("id3","name3"),("id4","name4"),]
for x in second_var:
if x[0] not in first_var:
print(x[1])
Pythonic 解决方案是将其转换为列表理解:
values = set(first_var)
res = [x[1] for x in second_var if x[0] not in values]
for item in res:
print(item)
或者功能版;不推荐,但另一种看待逻辑的方式:
from operator import itemgetter
values = set(first_var)
res = map(itemgetter(1), filter(lambda x: x[0] not in values, second_var))
