如何在不删除先前相同值的情况下选择具有重复项的列表中的特定数字?
Posted
技术标签:
【中文标题】如何在不删除先前相同值的情况下选择具有重复项的列表中的特定数字?【英文标题】:How can I select a specific number in a list with duplicates without removing the previous same values? 【发布时间】:2022-01-04 02:10:45 【问题描述】:我在 python3 中有以下列表:
a = [1, 1, 1, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3]
我想要这样的输出:
b = [1, 2, 3, 1, 2, 4, 3]
我该怎么做?我已经尝试过a = set(a)
和其他消除重复项的方法。但他们会删除所有重复项。
【问题讨论】:
这能回答你的问题吗? Removing elements that have consecutive duplicates 顺便说一句,欢迎来到 Stack Overflow!如果需要提示,请查看 tour 和 How to Ask。将来,请先尝试一些研究。我通过谷歌搜索python compress adjacent duplicates
找到了这个问题。
【参考方案1】:
如果你愿意使用某个模块,可以使用itertools.groupby
:
from itertools import groupby
a = [1, 1, 1, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3]
output = [k for k, _ in groupby(a)]
print(output) # [1, 2, 3, 1, 2, 4, 3]
【讨论】:
【参考方案2】:这可行:
a = [1, 1, 1, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3]
b = [a[0]]
for k in a:
if k!=b[-1]:
b.append(k)
print(b)
【讨论】:
非常感谢!【参考方案3】:如果你喜欢 C,你可能会喜欢这种风格:
a = [1, 1, 1, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3]
b=len(a)
i=0
last_one=None
while i<b:
if a[i]==last_one:
del a[i]
b-=1
continue
else:
last_one=a[i]
i+=1
print(a)
【讨论】:
以上是关于如何在不删除先前相同值的情况下选择具有重复项的列表中的特定数字?的主要内容,如果未能解决你的问题,请参考以下文章