将连续重复项变为一个值(Python)
Posted
技术标签:
【中文标题】将连续重复项变为一个值(Python)【英文标题】:Change consecutive duplicates into one value (Python) 【发布时间】:2022-01-14 05:00:00 【问题描述】:我在删除列表中的连续重复项而不删除所有重复项时遇到问题。
假设我有一个清单,
a = [3,3,3,4,10,11,3,3,5,5,10]
我想要做的是,只要一行中有重复项,该重复项就会更改为单个值。我希望这发生在任意数量的连续重复中。因此,我希望我的新 a 成为,
new_a = [3,4,10,11,3,5,10]
请注意,我不想像 set 函数那样删除其他重复项,我只想将连续重复项更改为一个值。
这是我的尝试,它有时有效,但不适用于我的所有列表,很可能是因为我不确定如何为我的范围设置一般规则。
for i in range(0, len(set(a))-1):
if a[i] == a[i+1]:
a.pop(i+1)
任何帮助都会很棒,谢谢。
【问题讨论】:
【参考方案1】:This might help
a=[3,3,4,10,11,3,5,5,0,0,10,11,11,10,10,0,0]
i=0
while(i<(len(a)-1)):
if a[i]==a[i+1]:
a.pop(i+1)
i+=1
print(a)
【讨论】:
【参考方案2】:a = [3,3,3,4,10,11,3,3,5,5,10]
new_a = []
for i in range(len(a)):
if a[i] != a[i-1]:
new_a.append(a[i])
print(new_a)
[3, 4, 10, 11, 3, 5, 10]
【讨论】:
【参考方案3】:您可以在迭代列表时跟踪最后一个项目,并仅在当前项目与最后看到的项目不同时将其附加到结果中。
在代码方面,
def solve(l):
seen = l[0]
ans = [l[0]]
for i in l[1:]:
if i != seen:
ans += [i]
seen = i
return ans
solve([1, 1, 1, 2, 1])
[1, 2, 1]
solve([3,3,3,4,10,11,3,3,5,5,10])
[3, 4, 10, 11, 3, 5, 10]
【讨论】:
【参考方案4】:你可以这样做:
a = [3,3,3,4,10,11,3,3,5,5,10]
b = [a[0]]
for x in a[1:]:
if x != b[-1]:
b.append(x)
print(b)
当然,这会创建一个新列表,因此您可以将 a 替换为 b
【讨论】:
【参考方案5】:这对你有帮助吗?
mylist = ["a", "b", "a", "c", "c"]
mylist = list(dict.fromkeys(mylist))
【讨论】:
【参考方案6】:你可以使用numpy.ediff1d
方法:
np.array(a)[np.concatenate(([1],np.ediff1d(a)))!=0].tolist()
输出:
[ 3, 4, 10, 11, 3, 5, 10]
【讨论】:
以上是关于将连续重复项变为一个值(Python)的主要内容,如果未能解决你的问题,请参考以下文章