2014-07-01 78 views
0

如何在列表中找到彼此相似的項目。例如:在Python列表中找到彼此相似的項目

list = ["A","B", "B", "C", "A", "A" ] 

#output: 

A-1, B-1, B-2, C-1, A-1, A-2 
+0

第二個a是a-2還是a-1?什麼是 –

+0

是的,第一個是a-1,第二個是a-2 – Juli

回答

3

聽起來像是一份工作itertools.groupby

>>> from itertools import groupby 
>>> lst = ["A","B", "B", "C", "A", "A" ] 
>>> ['{}-{}'.format(x, i) for k, g in groupby(lst) for i, x in enumerate(g, 1)] 
['A-1', 'B-1', 'B-2', 'C-1', 'A-1', 'A-2'] 

如果你需要一個字符串作爲輸出,那麼使用str.join

>>> ", ".join('{}-{}'.format(x, i) for k, g in groupby(lst) for i, x in enumerate(g, 1)) 
'A-1, B-1, B-2, C-1, A-1, A-2' 

什麼groupby做的是,它團體項目的值(或具有關鍵作用,如果我們提供任何),然後我們使用enumerate()循環遍歷每個組以獲取索引以及項目。

+0

+1優秀的答案!把一些解釋,使OP和其他用戶可以學習 –

+0

@MitulShah,謝謝你。例如,如果我想使用字符串而不是索引, 「A先,A秒」。有沒有更好的方法,而不是分裂每個項目,並用'second'用'first'和'2'代替'1' – Juli

0
list = ["A","B", "B", "C", "A", "A" ] 
stri='' 
counter=1 
for i in list: 
    if stri!=i: 
     stri=i 
     counter=1 
    else: 
     counter+=1 
    print stri,'-',counter 

解釋代碼:

  1. 採用可變stri跟蹤信和反得到計數
  2. 如果stri!=i分配新STRI否則,計數器增加
相關問題