Python中单独使用列表推导式是否规范?能否整合到集合创建中?
问题1解答
当然有更简洁高效的方法,直接把转换逻辑整合到集合初始化语句里,无需先创建空集合再通过列表推导式添加元素。推荐两种常用写法:
- 用生成器表达式直接构建集合:
some_list = [[1,2,3],[4,5,6],[1,2,3]] myset = set(tuple(t) for t in some_list) print(myset)
- 用
map函数批量转换后转集合:
some_list = [[1,2,3],[4,5,6],[1,2,3]] myset = set(map(tuple, some_list)) print(myset)
这两种写法都能直接生成目标集合,代码更紧凑,还避免了不必要的中间列表生成。
问题2解答
这种单独使用列表推导式却不赋值的写法绝对不是Python的标准实践,原因如下:
- 列表推导式的设计初衷是生成列表,这么写会凭空创建一个全是
None的无用列表(因为set.add()方法返回None),纯粹浪费内存; - 可读性极差,其他开发者看到会困惑你为什么要生成一个不用的列表,远不如普通
for循环清晰:
some_list = [[1,2,3],[4,5,6],[1,2,3]] myset = set() for t in some_list: myset.add(tuple(t)) print(myset)
Python官方的PEP8风格指南也明确反对这种“滥用列表推导式执行循环操作”的写法,这类仅需执行副作用、不需要生成列表的场景,优先用普通循环处理。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

