如何在推导式中生成tuple而非list 解决列表不可哈希无法存入set的问题
生成tuple类型推导结果并存入set的实现方法
- Python没有原生的
tuple推导式专属语法,可通过tuple()包裹生成器表达式实现等效效果,无需生成中间列表,运行效率更高。 - 语法转换规则:
原列表推导式写法:[运算逻辑 for 变量 in 可迭代对象 过滤条件]
对应tuple生成写法:tuple(运算逻辑 for 变量 in 可迭代对象 过滤条件) - 适配存入set的实际示例:
错误写法(列表为不可哈希类型,存入set会抛出异常):
正确写法:my_set = set() # 触发 TypeError: unhashable type: 'list' my_set.add([i for i in range(3)])my_set = set() # 生成的tuple可直接存入set my_set.add(tuple(i for i in range(3))) - 小数据量场景可选方案:如果已经通过列表推导式生成了结果,可直接转换为tuple:
tuple(已生成的列表对象),该方案会产生中间列表,不适合处理超大数据量。 - 注意事项:tuple可哈希的前提是其内部所有元素均为可哈希类型,若tuple包含列表、字典等不可哈希元素,依然无法存入set。
内容的提问来源于stack exchange,提问作者Joshua Snider
相关产品推荐
相关产品推荐

