Python 向集合列表中的元素添加值

Python 向集合列表中的元素添加值,python,mutable,Python,Mutable,我正在使用python,我有一个集合列表,构造如下: list = [set([])]*n …其中n是列表中所需的集合数。我想向列表中的特定集合添加一个值。第二盘。我试过了 list[1].add(value) 但这会将值添加到列表中的每个集合中。这种行为对我来说很不直观。通过进一步的测试,我想我已经发现了问题:这个列表显然包含10个同一集合的实例,或者10个指向同一集合的指针,等等。通过重复调用 list.append(set([])) 允许我使用上述语法向单个集合添加元素。所以我的问题

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

list = [set([])]*n
…其中n是列表中所需的集合数。我想向列表中的特定集合添加一个值。第二盘。我试过了

list[1].add(value)
但这会将值添加到列表中的每个集合中。这种行为对我来说很不直观。通过进一步的测试,我想我已经发现了问题:这个列表显然包含10个同一集合的实例,或者10个指向同一集合的指针,等等。通过重复调用

list.append(set([]))

允许我使用上述语法向单个集合添加元素。所以我的问题是:在我的第一个列表中,到底发生了什么?很明显,我不太懂语法。还有,有没有更好的方法初始化n元素列表?我使用这个语法已经有一段时间了,这是我遇到的第一个问题。

您自己已经总结了这个问题--
X*n
语法生成了X的一个实例并包含了n次。对于像
'a'*10
这样的东西来说,这不是问题,因为该字符串中的每个字符是否都指向同一个“a”并不重要,但对于列表和集合这样的可变结构来说,这是重要的。您可以使用列表创建n个单独的集合:

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

您自己已经大致总结了这个问题,
X*n
语法生成了X的一个实例,并包含了n次。对于像
'a'*10
这样的东西来说,这不是问题,因为该字符串中的每个字符是否都指向同一个“a”并不重要,但对于列表和集合这样的可变结构来说,这是重要的。您可以使用列表创建n个单独的集合:

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

是的,没错。*语法只是多次复制引用。您的方法工作正常,或者您可以使用列表理解来构造多个集合,如中所示:

list = [set([]) for x in xrange(n)]; 列表=[为x范围(n)中的x设置([]);
是的,没错。*语法只是多次复制引用。您的方法工作正常,或者您可以使用列表理解来构造多个集合,如中所示:

list = [set([]) for x in xrange(n)]; 列表=[为x范围(n)中的x设置([]);
啊,这就是我喜欢的那种简短、甜蜜、紧凑的陈述。非常感谢。像这样的紧凑性是我喜欢Python的主要原因:)紧凑性?嘘<代码>列表=[set()表示x范围内的x(n)]啊,这是我喜欢的那种简短、甜美、紧凑的语句。非常感谢。像这样的紧凑性是我喜欢Python的主要原因:)紧凑性?嘘
list=[set()for x in xrange(n)]
作为旁注,
set()
似乎是编写
set([])
的一种更为明显的方法。啊,谢谢你的提示。我总是看到里面有方括号,我认为它们是强制性的。你知道的越多!作为旁注,
set()
似乎是编写
set([])
的一种更明显的方法。啊,谢谢你的提示。我总是看到里面有方括号,我认为它们是强制性的。你知道的越多!