3 回答

TA貢獻1735條經驗 獲得超5個贊
我很好的用例itertools.groupby:
>>> from itertools import groupby
>>> list_before = [1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8]
>>> list_after = []
>>> for k, group in groupby(list_before):
... lst = list(group)
... if len(lst) >= 3:
... list_after.append(k)
... else:
... list_after.extend(lst)
>>> list_after
[1, 2, 3, 4, 5, 6, 6, 7, 8]
有可能制作一個單行,itertools.chain但for循環幾乎可以肯定更具可讀性和類似的性能。

TA貢獻1829條經驗 獲得超6個贊
>>> from itertools import groupby >>> nums = [1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8] >>> [k for k, g in groupby(nums) for i in range(1 + (len(list(g)) == 2))] [1, 2, 3, 4, 5, 6, 6, 7, 8]

TA貢獻1827條經驗 獲得超8個贊
正如克里斯在他的回答中指出的那樣,單線是可能的,但它一點也不漂亮。
In [88]: list(chain.from_iterable([(x,) if len(y) >= 3 else y for x, y in [(k, tuple(g)) for k, g in groupby(list_before)]]))
Out[88]: [1, 2, 3, 4, 5, 6, 6, 7, 8]
我認為應該有更好的方法,但chain在處理不可迭代對象時已經足夠了。
添加回答
舉報