2

我有一个需要包含可变数量的独立集的列表。当我运行以下代码时,我只想将字符串“testing”添加到第一组。

numberOfSets = 3    
test = [set()]*numberOfSets
test[0].add("testing")
print test

但是,当我 print 时test,它显示了三个相同的集合,它们都包含测试。如何设置我的列表以便我可以单独访问每个集合?

4

2 回答 2

4

你可以做

test = [set() for _ in xrange(numberOfSets)]  # use 'range' in Python 3.x

[set()]*x创建一个具有相同集合实例的列表x上面的理解在每次迭代时根据需要创建一个新的独立集合。

通常,当您将元素可变的列表相乘时,您应该非常小心。

于 2013-07-27T23:25:27.770 回答
4

当您这样做时[set()]*3,您将创建三个引用同一对象的集合,因此当您更改一个值时,其他值也会更改。在此处使用列表推导:

>>> numberOfSets = 3   
>>> test = [set() for _ in xrange(numberOfSets)]
>>> test[0].add("testing")
>>> print test
[set(['testing']), set([]), set([])]
于 2013-07-27T23:25:59.123 回答