2015-11-20 208 views
1

我原來的問題被問和回答的位置:Python: matching values from one list to the sequence of values in another list的Python:在另一個列表匹配從一個列表值的序列值

我有兩個列表。

e_list = [('edward', '1.2.3.4.'), ('jane','1.2.3.4.'), ('jackie', '2.3.4.10.')...] 

和的a_list(主列表對被檢查出來)

a_list = [('a', '1.2.3.'), ('b', '2.3.'), ('c', '2.3.4.')...] 

我想修改輸出到我原來的問題。我不確定如何更改代碼片段來解決相同的問題,但輸出所有可能性?

例如

new_list = [ ('edward', '1.2.3.4', '1.2.3'), ('jane', '1.2.3.4.', '1.2.3'), ('jackie', '2.3.4.10.', '2.3.'), ('jackie', '2.3.4.10.', '2.3.4')] 
+0

顯示您的輸入和預期輸出。 –

+0

@ReutSharabani我將URL複製到我之前的問題中,以便我不重複我的問題。但我會發布它。 – user47467

回答

0

你需要循環在a_list一切然後在e_list增加值的額外處理該案。它結束了看起來像這樣:

results = [] 
for name, x in e_list: 
    this_name = [name, x] 
    for a, b in a_list: 
     if x.startswith(b): 
      this_name.append(b) 
    results.append(tuple(this_name)) 

print(results) 

看到在這裏的行動:http://ideone.com/y8uAvC

+0

感謝您的回答:)有沒有辦法讓jackie在最終名單中成爲兩個獨立的元組? – user47467

+0

@ user47467這是非常簡單的,我相信你可以弄明白! – shuttle87

0

您可以使用列表解析,如果你想:

res = [(name, digits, match) for name, digits in e_list 
          for _, match in a_list 
          if digits.startswith(match)] 
print res 

但由於它變得複雜,嵌套循環可能會更清潔。您可以使用yield獲取最終列表:

def get_res(): 
    for name, digits in e_list: 
     for _, match in a_list: 
      if digits.startswith(match): 
       yield name, digits, match 

print list(get_res()) 
相關問題