我正在使用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元素列表?我一直在使用这种语法,这是我的第一个问题.
你自己几乎总结了这个问题 - X*n
语法是X的一个实例并且包含了n次.对于这样的事情来说'a'*10
,这不是一个问题,因为如果该字符串中的每个字符恰好指向相同的"a"并不重要,但它适用于像列表和集合这样的可变结构.您可以使用列表推导创建n个单独的集合:
list = [set() for x in xrange(n)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
724 次 |
最近记录: |