我有两个数据集,found
和allowed
。我想检查中的任何观察值found
是否未出现在中allowed
,以便确保将其标记为不允许。
found = [["A", "B", "C"], [10, 20, 30], ["X", "Y", "Z"]]
allowed = [["A", "B", "C", "D"], [20, 30, 40], ["W", "X", "Y"]]
如果运行以下命令,则会得到正确的答案,即 [(1, 10), (2, 'Z')]
new_values = []
for x in range(0, len(allowed)):
for val in found[x]:
if val not in allowed[x]:
new_values.append((x, val))
但是,如果我运行以下命令,它需要更少的行,并且我认为更容易,它将返回 new_values = [(2, 'Z')]
for x in range(0, len(allowed)):
new_values = [(x, val) for val in found[x] if val not in allowed[x]]
发生了什么事(1, 10)
?如果我跑步,10 in allowed[1]
我会False
认为它应该出现在其中new_values
!
您正在new_values
for循环中重新分配:
for x in range(0, len(allowed)):
new_values = [(x, val) for val in found[x] if val not in allowed[x]]
试试这个:
new_values = []
for x in range(0, len(allowed)):
new_values.extend([(x, val) for val in found[x] if val not in allowed[x]])
或者,甚至更短一些,使用列表推导:
new_values = [(x, val) for x in range(0, len(allowed)) for val in found[x] if val not in allowed[x]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句