1

我正在使用 python,我有一个集合列表,构造如下:

list = [set([])]*n

...其中 n 是我想要在列表中的集合数。我想为列表中的特定集合添加一个值。再说第二组。我试过了

list[1].add(value)

但这反而将值添加到列表中的每个集合。这种行为对我来说非常不直观。通过进一步的测试,我想我已经找到了问题所在:该列表显然包含同一集合的 10 个实例,或者指向同一集合的十个指针,或者其他什么。通过重复调用构建列表

list.append(set([]))

允许我使用上面的语法将元素添加到单个集合中。所以我的问题是:我的第一个列表构建技术到底发生了什么?很明显,我不太了解语法。另外,有没有更好的方法来初始化一个 n 元素列表?我使用这种语法已经有一段时间了,这是我遇到的第一个问题。

4

2 回答 2

5

您已经自己总结了这个问题——X*n语法创建了一个 X 实例并包含它 n 次。对于诸如此类的事情'a'*10来说这不是问题,因为该字符串中的每个字符是否恰好指向同一个'a'并不重要,但对于列表和集合等可变结构来说却是这样。您可以使用列表推导创建 n 个单独的集合:

list = [set() for x in xrange(n)]
于 2010-04-28T02:15:29.547 回答
1

对,那是正确的。* 语法只是多次复制引用。您的方法工作正常,或者您可以使用列表推导来构造那么多集合,如下所示:

list = [set([]) for x in xrange(n)];
于 2010-04-28T02:16:50.607 回答