简单的方法:
def grpBySameConsecutiveItem(l):
rv= []
last = None
for elem in l:
if last == None:
last = [elem]
continue
if elem == last[0]:
last.append(elem)
continue
if len(last) > 1:
rv.append(last)
last = [elem]
return rv
print grpBySameConsecutiveItem([1,2,1,1,1,2,2,3,4,4,4,4,5,4])
输出:
[[1, 1, 1], [2, 2], [4, 4, 4, 4]]
如果你想对你的输出进行排序或对你的 inputlist 进行排序,你可以在之后对输出进行排序,那么你就不会再得到连续的相同数字了。
请参阅https://stackoverflow.com/a/4174955/7505395,了解如何根据索引对列表列表进行排序(只需使用 0),因为所有内部列表都是相同的。
你也可以使用itertools - it hast things like TakeWhile - 如果使用它看起来更聪明
这将忽略连续的,只收集它们:
def grpByValue(lis):
d = {}
for key in lis:
if key in d:
d[key] += 1
else:
d[key] = 1
print(d)
rv = []
for k in d:
if (d[k]<2):
continue
rv.append([])
for n in range(0,d[k]):
rv[-1].append(k)
return rv
data = [1,2,1,1,1,2,2,3,4,4,4,4,5,4]
print grpByValue(data)
输出:
[[1, 1, 1, 1], [2, 2, 2], [4, 4, 4, 4, 4]]