(Python) 就地修改多个列表
(Python) Modify several lists in-place
我想从多个列表中删除重复项(就地)。已尝试以下但失败 (Python Compiler):
a = [1, 2, 2]
b = [3, 4, 4]
c = [5, 6, 6]
print('===previous')
print(id(a))
print(id(b))
print(id(c))
print('---previous')
for l in (a, b, c):
l = list(dict.fromkeys(l))
print('===middle')
print(id(l))
print('---middle')
print('===after')
print(id(a))
print(id(b))
print(id(c))
print(a)
print(b)
print(c)
print('---after')
我知道这是因为 (Python Variable)
Variables (names) are just references to individual objects.
想问一下有没有什么有效的方法可以达到这个目的,谢谢
使用sets。集合中不允许重复:
a = set(a)
b = set(b)
c = set(c)
如果您需要它们再次出现在列表中:
a = list(set(a))
b = list(set(b))
c = list(set(c))
a = [1, 2, 2]
b = [3, 4, 4]
c = [5, 6, 6]
a=list(dict.fromkeys(a))
b=list(dict.fromkeys(b))
c=list(dict.fromkeys(c))
print(a)
print(b)
print(c)
您必须覆盖值而不是变量名。如果您需要修改动态数量的列表,则可以通过获取每个列表的完整切片来覆盖列表中的所有值:
for my_list in (a, b, c):
my_list[:] = set(my_list)
我想从多个列表中删除重复项(就地)。已尝试以下但失败 (Python Compiler):
a = [1, 2, 2]
b = [3, 4, 4]
c = [5, 6, 6]
print('===previous')
print(id(a))
print(id(b))
print(id(c))
print('---previous')
for l in (a, b, c):
l = list(dict.fromkeys(l))
print('===middle')
print(id(l))
print('---middle')
print('===after')
print(id(a))
print(id(b))
print(id(c))
print(a)
print(b)
print(c)
print('---after')
我知道这是因为 (Python Variable)
Variables (names) are just references to individual objects.
想问一下有没有什么有效的方法可以达到这个目的,谢谢
使用sets。集合中不允许重复:
a = set(a)
b = set(b)
c = set(c)
如果您需要它们再次出现在列表中:
a = list(set(a))
b = list(set(b))
c = list(set(c))
a = [1, 2, 2]
b = [3, 4, 4]
c = [5, 6, 6]
a=list(dict.fromkeys(a))
b=list(dict.fromkeys(b))
c=list(dict.fromkeys(c))
print(a)
print(b)
print(c)
您必须覆盖值而不是变量名。如果您需要修改动态数量的列表,则可以通过获取每个列表的完整切片来覆盖列表中的所有值:
for my_list in (a, b, c):
my_list[:] = set(my_list)