求助:基于列表值实现Pythonic风格的列表拼接单行代码
Pythonic单行实现列表拼接方案
嘿,这需求用Python一行代码就能优雅解决!核心思路是利用迭代器的惰性特性,配合列表推导式完成替换逻辑,完全贴合Pythonic的风格。
直接上可运行的单行代码:
result = [next(v) if x == 1 else x for x, v in zip([0, 1, 1, 0, 0, 1, 1, 1, 0, 1], [iter(['a', 'b', 'c', 'd', 'e', 'f'])]*10)]
如果先定义变量,代码可读性会更好(同样是单行写法):
mask, values = [0,1,1,0,0,1,1,1,0,1], ['a','b','c','d','e','f']; result = [next(v) if x ==1 else x for x,v in zip(mask, [iter(values)]*len(mask))]
逻辑拆解:
iter(values)创建一个针对values列表的迭代器,它的特性是每次调用next()会取出下一个元素,不会重复取值;[iter(values)]*len(mask)是把同一个迭代器对象重复多次,这样在zip遍历过程中,每遇到mask里的1,都会调用这个迭代器的next(),从而依次取出values里的元素,刚好匹配mask中1的数量(这里正好6个1对应values的6个元素);- 列表推导式遍历mask的每个元素,判断是否为1:是则替换为迭代器的下一个元素,否则保留原0。
运行后得到的结果完全符合你的预期:
[0, 'a', 'b', 0, 0, 'c', 'd', 'e', 0, 'f']
这种方法既简洁高效,又充分利用了Python的语言特性,完美满足你的需求~
内容的提问来源于stack exchange,提问作者klamtd
相关产品推荐
相关产品推荐

