2017-10-04 73 views
1

我這兩個列表名單:如何使用相同的字母表比較兩個列表的列表並獲取最大數量並將它們附加到另一個列表中?

A=[[12, 'a'], [0, 'c'], [2, 'w'], [3, 'Q'], [0, 'a'], [0, 'c'], [0, 'w'], [5, 'Q']] 
B=[[12, 'a'], [0, 'c'], [15, 'w'], [3, 'Q']] 

,我想通過字母來這兩個列表進行比較,並與最大數量的列表追加到一個新的列表C 2

C=[[12, 'a'], [0, 'c'], [15, 'w'], [3, 'Q'],[12, 'a'], [0, 'c'], [15, 'w'], [5, 'Q']] 

編輯:我得到這個代碼,但它只輸出

C=[[12, 'a'], [0, 'c'], [15, 'w'], [3, 'Q']]? 

C = [] 
for g1, g2 in zip(a,b): 
    line = [] 
    for e1, e2 in zip(g1, g2): 
     line.append(max(e1, e2)) 
    C.append(line) 
+0

對你有好處......那麼,什麼讓你回來寫程序? –

+0

順便說一句,這兩個列表都使用相同的字母表,[ISO基本拉丁字母](https://en.wikipedia.org/wiki/ISO_basic_Latin_alphabet)。 –

+1

小提示:'B'應該是字典。 –

回答

0

zip可以在這種情況下無法正常工作,因爲B元素可以在C任何地方使用。由zip返回的迭代只有最短列表的元素。

你需要保持A的順序C,所以A應保持一個列表,但B應該是一個字典:

>>> A=[[12, 'a'], [0, 'c'], [2, 'w'], [3, 'Q'], [0, 'a'], [0, 'c'], [0, 'w'], [5, 'Q']] 
>>> B=[[12, 'a'], [0, 'c'], [15, 'w'], [3, 'Q']] 
>>> B = {l[1]:l for l in B} 
>>> B 
{'a': [12, 'a'], 'c': [0, 'c'], 'w': [15, 'w'], 'Q': [3, 'Q']} 

然後,您可以使用列表理解來獲得的最高值:

>>> [max(l, B[l[1]]) for l in A] 
[[12, 'a'], [0, 'c'], [15, 'w'], [3, 'Q'], [12, 'a'], [0, 'c'], [15, 'w'], [5, 'Q']] 
1

首先創建一個字典,其中包含B中的最大值,以確保處理列表中的任何可能的重複項。

A = [[12, 'a'], [0, 'c'], [2, 'w'], [3, 'Q'], [0, 'a'], [0, 'c'], [0, 'w'], [5, 'Q']] 
B = [[12, 'a'], [0, 'c'], [15, 'w'], [3, 'Q']] 

max_values = {} 

for count, value in B: 
    try: 
     max_values[value] = max(max_values[value], count) 
    except KeyError: 
     max_values[value] = count 

C = [[max(count, max_values[value]), value] for count, value in A] 

print C 

給你:然後使用基於B中發現的最大值和當前值列表理解創建C

[[12, 'a'], [0, 'c'], [15, 'w'], [3, 'Q'], [12, 'a'], [0, 'c'], [15, 'w'], [5, 'Q']] 

在你給的例子,B包含唯一值,但如果碰巧有多個條目用於同一個字母,該解決方案將確保使用最大值。

相關問題