Python列表推导时如何展开函数返回的元组避免嵌套结构?
解决方案
你可以通过以下两种仅调用一次f(x)的方式实现需求,两种方案都不会产生嵌套元组:
方案1:星号解包(Python 3.0+支持,语法更简洁)
在元组内对f(x)的返回值做可变长度解包,直接将返回的两个元素展开到外层元组中:
def f(x): return x, x+1 list_1 = [5, 8] list_2 = [(100, *f(x)) for x in list_1]
运行后list_2的结果就是你预期的[(100, 5, 6), (100, 8, 9)]。
方案2:元组拼接(全Python版本兼容)
把固定前缀封装为单元素元组,和f(x)返回的元组直接拼接:
list_2 = [(100,) + f(x) for x in list_1]
两种方案都保证每个x仅调用一次f(x),完全适配你所说的函数逻辑复杂、耗时高的场景。
内容的提问来源于stack exchange,提问作者Wartin
相关产品推荐
相关产品推荐

