Hezron Barnabas
Hezron Barnabas

Reputation: 41

Python Iteration in list

Is there a way to test whether an item in a list has repetitions of 5 digits and above, and the repetitions being adjacent to each other?

#!/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)

I can only think of using if statements, but my actual list is pretty long and it will be inefficient if the item contains repetitions in between an item, such as '1123333345', which requires me to write never ending ifs'.

With my second method in mind, I'm not too sure how to proceed after knowing how many repetitions are there, and even so, it will return items having five repetitions but not adjacent to each other, such as '1212121212'.

Any ideas?

Upvotes: 0

Views: 93

Answers (2)

Chris_Rands
Chris_Rands

Reputation: 41248

You could use 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']

Upvotes: 1

Eugene Yarmash
Eugene Yarmash

Reputation: 150178

The condition is that i only want the items with a repetition of 5 digits and above

Use a 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

Upvotes: 2

Related Questions