如何实现整数列表与字符串列表对应次数拼接?代码错误求排查
列表“相乘”代码错误排查
问题背景
现有两个列表:
l1 = [2,2,3] l2 = ['a','b','c']
想要实现两个列表“相乘”,得到预期输出:
# output: ['a','a','b','b','c','c','c']
但使用以下代码后:
l3 = [] for i in l2: for j in l1: l3.append(i)
得到的结果却是:
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']
不符合预期,下面分析代码中的错误:
错误原因
你的代码逻辑是对l2里的每个元素,循环遍历整个l1的所有元素并重复添加,所以每个字符都会被添加3次(因为l1有3个元素),这和需求里“每个字符对应l1中同位置的次数”不匹配。
正确逻辑应该是:l2中第n个元素,重复添加的次数等于l1中第n个元素的值——也就是a加2次、b加2次、c加3次。
修正代码
可以用zip()函数把两个列表的对应元素配对,再按次数添加:
l1 = [2,2,3] l2 = ['a','b','c'] l3 = [] for char, count in zip(l2, l1): l3.extend([char] * count) print(l3) # 输出: ['a','a','b','b','c','c','c']
也可以用更简洁的列表推导式写法:
l3 = [char for char, count in zip(l2, l1) for _ in range(count)]
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

