2017-07-08 43 views
0

我有一個列表,我以下述方式填充:檢查如果一個列表的元素的一部分被重複

complete = [] 
for (i,j) in list: 
    complete.append('%s %s %s'%(i,j,R[i,j])) 

列表具有(作爲一個例子)以下元素:

complete = ['B A 1', 'A H 1', 'P B 1', 'H B 1', 'B W 1', 'B M 9', 'M R 9', 'R P 9', 'P A 9', 'C S 7', 'B C 7', 'B A 7', 'A H 7', 'B P 7', 'M B 7', 'P B 7', 'H B 7'] 

我想檢查哪些字母重複,並在這種情況下添加相應的數字。 在這個例子中,(B A)與1和7重複,所以其中一個輸出必須是'B A 8'。

我也可以改變我追加元素的方式來完成,但我不知道其他方式如何。

謝謝!

回答

2

你可以試試這個:

from collections import Counter, defaultdict 
complete = ['ASO BAIS 1', 'HEL CIO 5'] 

d = Counter([i[:-1] for i in complete]) 

new_d = defaultdict(int) 

for i in complete: 
    if d[i[:-1]] > 0: 
    new_d[i[:-1]] += int(i[-1]) 

print(dict(new_d)) 
#maximum value: 
maximum = max(new_d.values()) 
print(maximum) 

輸出:

{'HEL CIO ': 5, 'ASO BAIS ': 1} 
+0

不錯!謝謝。如果列表不是'A B 1''H C 5'......而是'ASO BAIS 1''HEL CIO 5'?而不是隨機大小的字母單詞? –

+0

@IgnacioGarcia請看我最近的編輯。我只是改變了列表切片的索引,以創建一個更強大的解決方案,它將適用於您指定的輸入。 – Ajax1234

+0

非常感謝!最後,我怎樣才能獲得這個new_d的最大值?例如max(new_d)= 5。 –

0

這可以通過兩個步驟非常簡單地完成:

  1. 首先,獲得獨特的字母列表在你的列表中配對。這將用於製作字典。
  2. 接下來,遍歷列表中的每個元素,並使用當前字母對索引字典。通過將元素中的最後一個字符轉換爲整數來增加字典中字母對的鍵值對。

>>> lst = ['B A 1', 'A H 1', 'P B 1', 'H B 1', 'B W 1', 'B M 9', 'M R 9', 'R P 9', 'P A 9', 'C S 7', 'B C 7', 'B A 7', 'A H 7', 'B P 7', 'M B 7', 'P B 7', 'H B 7'] 
>>> keys = set(key[:3] for key in lst) 
>>> 
>>> new_dict = {key: 0 for key in keys} 
>>> for el in lst: 
...  new_dict[el[:3]] += int(el[4]) 
... 
>>> new_dict 
{'B C': 7, 'H B': 8, 'R P': 9, 'B A': 8, 'B P': 7, 'B M': 9, 'P A': 9, 'A H': 8, 'C S': 7, 'M B': 7, 'M R': 9, 'P B': 8, 'B W': 1} 
>>> 
+0

謝謝@Christian Dean。我現在怎麼能獲得這個new_dict的最大值?例如max(new_dict)= 9 –

+0

@IgnacioGarcia您可以獲得字典值的最大值:'max(new_dict.values())'。 –

相關問題