Python 删除重复项而不创建新列表
我需要以2种方式删除重复项,其中一种方式可以创建一个新列表,我通过以下方式完成了此操作:Python 删除重复项而不创建新列表,python,list,duplicates,Python,List,Duplicates,我需要以2种方式删除重复项,其中一种方式可以创建一个新列表,我通过以下方式完成了此操作: def remove_extras(lst): new_list = [] for number in list: if number not in new_list: new_list.append(number) return new_list 我需要第二种方法,不创建新列表(不需要保留顺序)。我尝试使用set,但它与原始列表不同,因此无法通
def remove_extras(lst):
new_list = []
for number in list:
if number not in new_list:
new_list.append(number)
return new_list
我需要第二种方法,不创建新列表(不需要保留顺序)。我尝试使用set,但它与原始列表不同,因此无法通过测试。有人有任何提示或解决方案吗?谢谢只需执行以下操作:
old_list = [1,1,2,2,3,3]
# create a new list
new_list = list(set(old_list))
# modify old list
old_list = list(set(old_list))
您可以重用函数并使用切片分配:
lst[:] = remove_extras(lst)
可以以相同的方式使用更成熟的删除重复项的方法:
lst[:] = list(set(lst)) # order not preserved
lst[:] = list(OrderedDict.fromkeys(lst)) # order preserved
lst
之后将是相同的list
对象
def remove(lst):
seen = set()
def unseen():
for val in lst:
if not val in seen:
yield val
seen.add(val)
lst[:] = unseen()
return lst
输入:
l = [1,4,2,5,2,2]
输出:
remove(l)
print l
[1, 4, 2, 5]
如果您需要新列表与原来的列表完全相同,请尝试
data[:] = list(set(data))
通过在赋值上使用slice操作符,列表将就地更新,而不是创建新列表
lst[:] = set(lst)
演示:
由于您明确要求不要创建新的
列表
对象,因此可以迭代列表中的项目集,并从列表中删除项目计数大于1的实例
x_list = [1,1,2,2,3,3]
for x in set(x_list):
for i in range(1, x_list.count(x)):
x_list.remove(x)
x_list
[1, 2, 3]
这就形成了一个新的列表well@StefanPochmann我想我已经解决了这两个问题。@schwobasegll,edited为什么要创建一个临时列表?@StefanPochmann我不知道你可以使用任何ol'迭代器来分配给切片。我将保持原样,因为切片分配的变异性质和不同方法对顺序保持的影响的要点是明确的。我将保持原样…您知道如何从列表中删除元素吗?这在这里很有用。
x_list = [1,1,2,2,3,3]
for x in set(x_list):
for i in range(1, x_list.count(x)):
x_list.remove(x)
x_list
[1, 2, 3]