列表

时间:2016-09-16 15:22:43

标签: python

有没有办法测试列表中的项目是否重复5位及以上,重复是否相互相邻?

#!/usr/bin/env python
import itertools
from collections import Counter

mylist = ['000002345','1112345','11122222345','1212121212']

#some function code here

#expected output
#['000002345','11122222345'] #1 and 2 repeats five times, next to each other

#method 1
v = list(mylist[0])

for i in v:
    if v[0]==v[1] and v[0]==v[1]...

#method 2
v = list(mylist[0])
Counter(v)

我只能想到使用if语句,但是我的实际列表很长,如果项目在项目之间包含重复,例如' 1123333345',这需要我写,这将是低效的永远不会结束ifs'。

考虑到我的第二种方法,我不知道在知道有多少重复之后如何继续进行,即便如此,它将返回具有五次重复但彼此不相邻的项目,例如& #39; 1212121212'

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

  

条件是我只想要重复5的项目   数字及以上

使用regular expression

>>> import re
>>> mylist = ['000002345', '1112345', '11122222345', '1212121212']
>>> for item in mylist:
...     if re.search(r'(\d)\1{4,}', item):
...         print(item)
... 
000002345
11122222345

答案 1 :(得分:1)

您可以使用itertools.groupby

>>> from itertools import groupby
>>> [item for item in mylist if any(len(list(y))>=5 for x,y in groupby(item))]
['000002345', '11122222345']