我有两个嵌套列表:
data1 = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]
data2 = [["tr1", 1000, 6798381, "vid1"], ["tr1", 1000, 6798381, "vid2"], ["tr2", 1200, 6798381, "vid3"], ["tr3", 1200, 6798381, "vid4"]]
data2_but_same_index = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr3", 1200, 6798381]]
然后我将在它们之间进行比较,但仅在第 3 个索引中进行比较。因为当它返回 true 时,它将采用 data2 列表中的第四个索引。
当索引数量相同时我期望的返回(比较 data1 和 data2_but_same_index)
data1 = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]
data2 = [["tr1", 1000, 6798381, "vid1"], ["tr1", 1000, 6798381, "vid2"], ["tr2", 1200, 6798381, "vid3"], ["tr3", 1200, 6798381, "vid4"]]
data2_but_same_index = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr3", 1200, 6798381]]
for x in data1 :
if x in data2_without_vid :
print("true")
else :
print("false")
输出将返回:
true
true
true
false
我希望我可以像这样比较 data_1 和 data_2,但返回的是 data_2 列表中每个列表的第四个索引(如果为 true)(vid1/vid2/vid3/vid4)
更新数据:
data1 = [["tr1", 1001, 6798381],["tr1", 1001, 6798381],["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]
更新新数据: 数据1 = [["tr3", 1200, 6798381], ["tr1", 1001, 6798381],["tr1", 1001, 6798381],["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]
最佳答案
您可以zip
这两个列表并将子列表映射到operator.eq
函数进行比较。由于 map
在任何输入序列用完时停止迭代,因此第二个子列表的第四项将不会包含在比较中:
from operator import eq
for a, b in zip(data1, data2):
print(all(map(eq, a, b)) and b[3])
输出:
vid1
vid2
vid3
False
关于python - 比较具有不同索引量的两个嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77042188/