我正在使用 python,并且我有一个集合列表,其构造如下:
list = [set([])]*n
...其中 n 是列表中我想要的集合数。我想向列表中的特定集合添加一个值。再说第二盘。我试过了
list[1].add(value)
但这反而会将值添加到列表中的 each 集。这种行为对我来说非常不直观。通过进一步的测试,我想我已经找到了问题所在:列表显然包含同一个集合的 10 个实例,或者十个指向同一个集合的指针,等等。通过重复调用构造列表
list.append(set([]))
允许我使用上面的语法将元素添加到单个集合中。所以我的问题是:我的第一个列表构建技术到底发生了什么?很明显我不太理解语法。另外,有没有更好的方法来初始化 n 元素列表?我使用这种语法已有一段时间了,这是我遇到的第一个问题。
请您参考如下方法:
您自己已经大致总结了这个问题——X*n 语法生成一个 X 实例并包含它 n 次。对于像 'a'*10 这样的东西来说这不是问题,因为该字符串中的每个字符是否恰好指向相同的 'a' 并不重要,但对于可变结构如列表和套。您可以使用列表推导式创建 n 个单独的集合:
list = [set() for x in xrange(n)]
