在集合列表中的元素添加一个值

1 投票
2 回答
748 浏览
提问于 2025-04-15 22:06

我在用Python,手里有一个集合的列表,像这样构建的:

list = [set([])]*n

...其中n是我想要在列表中放的集合数量。我想往列表中的一个特定集合里添加一个值,比如说第二个集合。我试过这样做:

list[1].add(value)

但这样做却把这个值加到了列表中的每一个集合里。这让我觉得很不直观。经过进一步的测试,我发现问题出在这里:这个列表里似乎包含了10个相同集合的实例,或者说是10个指向同一个集合的指针,或者其他什么东西。通过重复调用

list.append(set([]))

来构建列表,让我可以用上面的语法往单个集合里添加元素。所以我想问的是:我最开始构建列表的方式到底发生了什么?显然我对这个语法理解得不太好。另外,有没有更好的方法来初始化一个n个元素的列表?我用这个语法已经有一段时间了,这还是我第一次遇到这样的问题。

2 个回答

1

没错,确实是这样。这个 * 语法其实就是把引用复制了很多次。你的方法没问题,或者你也可以用列表推导式来创建那么多个集合,像这样:

list = [set([]) for x in xrange(n)];
5

你基本上已经总结了问题的核心——X*n 这种写法会创建一个 X 的实例,并把它重复 n 次。对于像 'a'*10 这样的情况就没问题,因为字符串中的每个字符指向同一个 'a' 也无所谓。但对于像列表和集合这样的可变结构,就会有问题。你可以使用列表推导式来创建 n 个独立的集合:

list = [set() for x in xrange(n)]

撰写回答