是否可以将此yield-function转换为(更简洁的)列表理解?
l1 = ['ID1', 'ID2', 'ID3', 'sum', 'sum', 'sum']
l2 = ['', '', '', 'Val1', 'Val2', 'Val3']
def getList(l1, l2):
for i in range(len(l1)):
yield l2[i] if l1[i] == 'sum' else l1[i]
print(list(getList(l1, l2)))
Thx&亲切的问候
答案 0 :(得分:3)
是的,您可以将循环写为列表理解,如下所示:
def getList(l1, l2)
return [b if b == 'sum' else a for a, b in zip(l1, l2)]
请注意,该函数不再是生成器,因为它不会生成单个值但返回list
。
答案 1 :(得分:2)
这可能是您正在寻找的内容:
list_comp = [i for i in (l1+l2) if i not in ['', 'sum']]
print(list_comp)
#['ID1', 'ID2', 'ID3', 'Val1', 'Val2', 'Val3']
答案 2 :(得分:0)
你也可以使用map()
:
def get_list(l1, l2):
return list(map(lambda x, y: y if y == 'sum' else x, l1, l2))