将值添加到集合列表中的元素

1 python mutable

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

list = [set([])]*n
Run Code Online (Sandbox Code Playgroud)

...其中n是列表中我想要的集合数.我想为列表中的特定集添加值.说,第二集.我试过了

list[1].add(value)
Run Code Online (Sandbox Code Playgroud)

但是,这会将值添加到列表中的每个集合.这种行为对我来说非常不直观.通过进一步的测试,我认为我发现了问题:列表显然包含10个相同集合的实例,或者指向同一集合的10个指针,或者其他东西.通过反复调用构造列表

list.append(set([]))
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*zek 5

你自己几乎总结了这个问题 - X*n语法是X的一个实例并且包含了n次.对于这样的事情来说'a'*10,这不是一个问题,因为如果该字符串中的每个字符恰好指向相同的"a"并不重要,但它适用于像列表和集合这样的可变结构.您可以使用列表推导创建n个单独的集合:

list = [set() for x in xrange(n)]
Run Code Online (Sandbox Code Playgroud)

  • 紧凑?啧.`list = [x(n)中x的set()]` (2认同)