如何在不删除先前相同值的情况下选择具有重复项的列表中的特定数字?

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)



【讨论】:

以上是关于如何在不删除先前相同值的情况下选择具有重复项的列表中的特定数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除重复值的情况下对数据集进行分组

如何在不使用 LOOP 的情况下计算取决于先前值的当前值?

如何在不重复值的情况下链接两个 jcombobox

如何在不覆盖先前值的情况下为同一个键设置多个值?

如何在不弄乱下拉值的情况下使 Angular Reactive Formarray 中的级联下拉菜单工作

VBA比较两个列表并删除不同列中具有重复值的行