2014-07-23 61 views
-1

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

我希望這是有道理的,我很感激任何幫助,我可以得到。

+1

'如果rowi [k] == rowj [h]'? – Blender

回答

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() 
+0

請注意(點擊上方的向上箭頭'0')任何幫助您並接受的答案(單擊向下箭頭下方的複選標記)解決您問題的答案。 「謝謝」的貨幣就是聲譽,這就是你提高聲譽的方法。 :) – sjakobi

+0

它不會讓我這樣做沒有級別15評級 - 有沒有其他的方式?另外,如果我爲三個不同的變量做這個,有三種方法可以做到這一點嗎? – Code4Days

+0

接受答案應該是可能的。上面的嵌套迭代顯然可以擴展爲三個列表。如果你想「拉鍊」三個列表,你可以這樣做:'map(function_of_three_variables,list1,list2,list3)'。 – sjakobi

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]] 
0

您可以使用枚舉任何指數:

for ind,row in enumerate(list1): 
    if row[3] == list2[ind][6]: 
     print row 

這將如果當前的第三個元素打印行行list1等於同一索引的行的第六元素list2

+0

與此唯一的問題是行不一定對應(他們可能......但不一定)。這是有效的,但只有當行是平坦的。有沒有辦法做到這一點行不平? – Code4Days

+0

@ EMoney2130,你的意思是每行中的元素可能不是偶數,或者數字或行可能不同? –

+0

兩行的元素可能不均勻。理想情況下,我希望匹配每行的三個值(我可以將其定義爲三個函數) - 這三個值匹配起來後,我將能夠輸出特定信息 – Code4Days

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]] 
相關問題