Python|更改给定列表中的重复值
很多时候,我们将具有相同编号的列表作为序列处理,并且我们希望只保留第一次出现的元素并用不同的编号替换所有出现的位置。让我们讨论一些可以做到这一点的方法。
方法 #1:使用列表理解 + enumerate()
这个任务可以使用列表推导来实现遍历,检查元素出现和索引检查可以使用 enumerate函数完成。
# Python3 code to demonstrate
# Altering duplicated
# using list comprehension + enumerate()
# initializing list
test_list = [2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5]
# printing original list
print("The original list : " + str(test_list))
# using list comprehension + enumerate()
# Altering duplicated
res = [False if (ele in test_list[ :idx]) else ele
for idx, ele in enumerate(test_list)]
# print result
print("The altered duplicate list is : " + str(res))
输出 :
The original list : [2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5]
The altered duplicate list is : [2, False, 3, False, False, False, 4, False, 5, False, False]
方法 #2:使用itertools.groupby()
+ 列表理解
也可以使用上述函数的组合来执行此特定任务,使用groupby
函数来获取不同元素的组,并使用列表理解来更改重复项。
# Python3 code to demonstrate
# Altering duplicated
# using itertools.groupby() + list comprehension
from itertools import groupby
# initializing list
test_list = [2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5]
# printing original list
print("The original list : " + str(test_list))
# using itertools.groupby() + list comprehension
# Altering duplicated
res = [val for key, grp in groupby(test_list)
for val in [key] + [False] * (len(list(grp))-1)]
# print result
print("The altered duplicate list is : " + str(res))
输出 :
The original list : [2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5]
The altered duplicate list is : [2, False, 3, False, False, False, 4, False, 5, False, False]