2014-07-01 39 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否则,计数器增加
相关问题