我需要删除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但它与原始列表不同,因此没有通过测试。任何人有任何提示或解决方案?感谢
答案 0 :(得分:1)
您可以重复使用您的函数并使用切片分配:
lst[:] = remove_extras(lst)
可以以相同的方式使用更加确定的删除重复项的方法:
lst[:] = list(set(lst)) # order not preserved
lst[:] = list(OrderedDict.fromkeys(lst)) # order preserved
lst
之后将成为同一个list
对象。
答案 1 :(得分:0)
请执行以下操作:
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))
答案 2 :(得分:0)
iso
输入:
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]
答案 3 :(得分:0)
如果您需要新列表确实是相同的列表,请尝试
data[:] = list(set(data))
通过在赋值时使用切片运算符,列表会更新到位,而不是创建新列表
答案 4 :(得分:0)
lst[:] = set(lst)
演示:
>>> lst = [1, 2, 3, 1, 2, 3]
>>> lst[:] = set(lst)
>>> lst
[1, 2, 3]
答案 5 :(得分:0)
由于您明确要求不创建新的list
对象,因此您可以迭代列表中的项目集,并从列表中删除项目计数大于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]