You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将给定yield函数转换为更简洁的条件列表推导式?

当然可以!而且转换后的列表推导式非常简洁清晰

先把你提到的生成器函数写出来方便对照:

def getList(l1, l2):
    for i in range(len(l1)):
        if l1[i] == 'sum':
            yield l2[i]
        else:
            yield l1[i]

对应的条件列表推导式可以直接写成基于索引的版本:

result = [l2[i] if l1[i] == 'sum' else l1[i] for i in range(len(l1))]

不过更Pythonic的写法是用zip()来同时遍历两个列表的元素,不用手动处理索引,可读性和简洁度都更好:

result = [val2 if item1 == 'sum' else item1 for item1, val2 in zip(l1, l2)]

简单解释:

  • zip(l1, l2)会把两个列表中对应位置的元素一一配对,比如第一个配对是('ID1', ''),第四个配对是('sum', 'Val1')
  • 列表推导式里的条件判断逻辑和你原来的生成器完全一致:如果l1的当前元素是'sum',就取l2对应位置的元素,否则直接保留l1的元素

用你的示例数据测试一下:

l1 = ['ID1', 'ID2', 'ID3', 'sum', 'sum', 'sum']
l2 = ['', '', '', 'Val1', 'Val2', 'Val3']
result = [val2 if item1 == 'sum' else item1 for item1, val2 in zip(l1, l2)]
print(result)
# 输出: ['ID1', 'ID2', 'ID3', 'Val1', 'Val2', 'Val3']

完全符合预期的结果。

内容的提问来源于stack exchange,提问作者r.user.05apr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:58:56