Python中如何将列表字符串重复指定次数后生成目标列表?
问题分析与解决
你的代码问题出在对字符串操作和列表推导式的逻辑理解上:
i*4作用于字符串时,会把整个字符串重复4次拼接成一个长字符串(比如'0.05 ml : 25 ml'*4会得到'0.05 ml : 25 ml0.05 ml : 25 ml0.05 ml : 25 ml0.05 ml : 25 ml')", ".join()会把这个长字符串的每个字符拆出来用逗号分隔,这就导致了字符被拆分的错误结果- 同时你的列表推导式最终生成的是包含5个拼接后长字符串的列表,完全不符合你要的20个独立元素的预期
正确解法一:嵌套列表推导式
这是最直观的实现方式,外层循环遍历原列表元素,内层循环重复4次将元素加入新列表:
conc = ['0.05 ml : 25 ml', '0.05 ml : 37.5 ml', '0.05 ml : 50 ml', '0.05 ml : 62.5 ml', '0.05 ml : 75 ml'] new_conc = [item for item in conc for _ in range(4)] print(new_conc)
正确解法二:列表乘法+extend合并
先为每个元素生成包含4次重复的子列表,再将所有子列表合并为一个大列表:
conc = ['0.05 ml : 25 ml', '0.05 ml : 37.5 ml', '0.05 ml : 50 ml', '0.05 ml : 62.5 ml', '0.05 ml : 75 ml'] new_conc = [] for item in conc: new_conc.extend([item]*4) print(new_conc)
正确解法三:itertools.chain高效展开(适合大列表)
借助itertools.chain避免创建中间子列表,内存效率更高:
from itertools import chain conc = ['0.05 ml : 25 ml', '0.05 ml : 37.5 ml', '0.05 ml : 50 ml', '0.05 ml : 62.5 ml', '0.05 ml : 75 ml'] new_conc = list(chain.from_iterable([item]*4 for item in conc)) print(new_conc)
以上三种写法运行后,都会生成你预期的包含20个重复元素的列表。
内容的提问来源于stack exchange,提问作者PythonLover
相关产品推荐
相关产品推荐

