不知道怎么说这个,但是说我有一个包含以下序列的列表:
[a,a,a,b,b,b,a,a,a]
我想回来:
[a,b,a]
原则上如何做到这一点?
答案 0 :(得分:4)
您可以使用itertools.groupby
,它将同一组中的连续相同元素分组,并返回键值对的迭代器,其中键是您要查找的唯一元素:
from itertools import groupby
[k for k, _ in groupby(lst)]
# ['a', 'b', 'a']
lst = ['a','a','a','b','b','b','a','a','a']
答案 1 :(得分:2)
Psidoms的方式要好得多,但我也可以这样写,这样你就可以看到它是如何使用基本循环和语句的。总是很好地弄清楚你需要针对任何问题采取什么步骤,因为它通常会使简单的编码变得更容易:)
original = ['a','a','a','b','b','b','a','a','a']
new = [original[0]]
for letter in original[1:]:
if letter != new[-1]:
new.append(letter)
如果前面的字母不同,它基本上会附加一封信。
答案 2 :(得分:1)
使用列表理解:
original = ['a','a','a','b','b','b','a','a','a']
packed = [original[i] for i in range(len(original)) if i == 0 or original[i] != original[i-1]]
print(packed) # > ['a', 'b', 'a']
同样(感谢pylang)您可以使用enumerate
代替range
:
[ x for i,x in enumerate(original) if i == 0 or x != original[i-1] ]
答案 3 :(得分:0)
more_itertools
包含unique_justseen
recipe from itertools
:
import more_itertools as mit
list(mit.unique_justseen(["a","a","a","b","b","b","a","a","a"]))
# ['a', 'b', 'a']