使用python。我的代码有两个由较小列表组成的大型列表 - 基本上是list1=[[3,2,1,5][3,2,1,2].......]
,list2=[[2,5,122,1,1][3,1,3,1,1].......]
。我想比较两个列表的具体值,当它们相等时,返回整行。
我在一个简单的基础上完成了一个返回所有相等行的文件(如果所有元素都相等):
for rowi in list1:
for rowj in list2:
if rowi==rowj:
print rowi
但是,这要求行的所有元素都相等。做同样的事情会很好,但是比较说rowi的元素k和rowj的元素h,如果它们相等则返回所有的rowj。
我对代码的想法是:
w=1
while w>0:
x=list1[w][3]
y=list2[w][6]
if x == y:
print row.........
上面的代码肯定不正确,但它可能是朝着正确方向发展的。
这很重要的原因是因为一个文件附加了额外的数据 - 例如:文件1中的x,y,z和文件2中的a,b,x,y,z,c,d。
我希望这是有道理的,我感谢你能得到的任何帮助。
答案 0 :(得分:1)
好像你应该首先定义两行的“相等”:
def fit_together(row1, row2):
return row1[1] == row2[0] # or something like that
# to test all combinations:
for row1 in list1:
for row2 in list2:
if fit_together(row1, row2):
do_sth()
# to test all rows with the same indices in their respective lists:
for row1, row2 in zip(list1, list2):
if fit_together(row1, row2):
do_sth()
答案 1 :(得分:0)
我会zip
这些列表,所以你在两个列表的每一行都有一个tuple
。然后你可以在列表理解中比较它们。下面,我将比较两个列表的第二个元素[1]
。
>>> l1 = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
>>> l2 = [[3,2,3], [1,2,3], [1,8,9], [9,11,12]]
>>> rows = zip(l1,l2)
>>> [i for i in rows if i[0][1] == i[1][1]]
输出
[([1, 2, 3], [3, 2, 3]),
([7, 8, 9], [1, 8, 9]),
([10, 11, 12], [9, 11, 12])]
要清楚,你可以换掉你想要的任何索引
[i for i in rows if i[0][element_from_list_1] == i[1][element_from_list_2]]
答案 2 :(得分:0)
您可以使用枚举:
for ind,row in enumerate(list1):
if row[3] == list2[ind][6]:
print row
如果list1
中当前行的第3个元素等于list2
中相同索引的行的第6个元素,则会打印该行
答案 3 :(得分:0)
# n1 row index of the interesting value from the first list
# n2 ... second list
[v for i, v in enumerate(list1) if v[n1] == list2[i][n2]]