如果特定值相等,则比较多个列表中的值并返回整个列表

时间:2014-07-23 00:58:02

标签: python csv

使用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。

我希望这是有道理的,我感谢你能得到的任何帮助。

4 个答案:

答案 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]]