如何在Python中创建包含独立空集合的列表?
创建包含独立空集合的列表的替代方法
你已经发现用[set()]*x生成的列表里,所有元素都指向同一个集合实例——修改其中一个,所有元素都会跟着变。除了列表推导式,还有几种方法能生成每个元素都是独立空集合的列表:
1. 生成器表达式配合list()
和列表推导式逻辑一致,只是写法略有不同:
x = 5 l = list(set() for _ in range(x)) l[0].add(1) print(l) # [{1}, set(), set(), set(), set()]
2. 使用itertools.repeat结合map
借助itertools.repeat控制生成次数,再用map每次创建新集合:
import itertools x = 5 l = list(map(lambda _: set(), itertools.repeat(None, x))) l[0].add(1) print(l) # [{1}, set(), set(), set(), set()]
3. functools.partial配合map
用partial包装set构造方法,通过map生成多个独立实例:
from functools import partial x = 5 l = list(map(partial(set), range(x))) l[0].add(1) print(l) # [{1}, set(), set(), set(), set()]
4. 手动循环初始化
最直白的写法,逐个添加新集合到列表:
x = 5 l = [] for _ in range(x): l.append(set()) l[0].add(1) print(l) # [{1}, set(), set(), set(), set()]
这些方法的核心原理都是每次创建一个全新的集合实例,避免了引用同一个对象的问题。同样逻辑也适用于生成包含独立空列表的列表,只需把set()换成[]或list()即可。
内容的提问来源于stack exchange,提问作者Michael Hearn
相关产品推荐
相关产品推荐

