我有一个列表需要包含可变数量的独立集合。 当我运行以下代码时,我想将字符串“testing”添加到第一组代码中。
numberOfSets = 3
test = [set()]*numberOfSets
test[0].add("testing")
print test
但是,当我打印test
时,它会显示三个完全包含测试的相同集合。如何设置列表以便我可以单独访问每个集?
答案 0 :(得分:4)
你可以做到
test = [set() for _ in xrange(numberOfSets)] # use 'range' in Python 3.x
[set()]*x
创建一个包含相同集合实例的x
的列表,而上面的解析会根据需要在每次迭代时创建一个新的独立集合。
一般情况下,每当您将元素可变的列表相乘时,您应该非常谨慎。
答案 1 :(得分:4)
执行[set()]*3
时,会创建三个引用同一对象的集合,因此当您更改一个值时,其他值会更改。改为使用列表推导:
>>> numberOfSets = 3
>>> test = [set() for _ in xrange(numberOfSets)]
>>> test[0].add("testing")
>>> print test
[set(['testing']), set([]), set([])]