我提前道歉,我真的不知道如何解释我的要求。我有一个分数列表和每个分数出现的频率列表,我想对每个出现的分数做一个新的列表。
我一直在尝试一些嵌套的for循环,但输出会用每个频率迭代每个分数。
for x in scores:
for f in freq:
for i in range(f):
desired_output.append(x)
我该如何制作一个新的列表来显示所有结果?
scores = [6, 7, 8, 9]
frequency = [1, 3, 5, 4]
desired_output = [6, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9,]
为了提高性能并减少迭代次数,我建议用toRex:代替第二个例子
scores = [6, 7, 8, 9]
frequency = [1, 3, 5, 4]
ls = []
for s,f in zip(scores,frequency):
ls = ls + [s]*f;
print(ls)
scores = [6, 7, 8, 9]
frequency = [1, 3, 5, 4]
ls= [ [s]*f for s,f in zip(scores,frequency)]
print(ls)
输出
[[6], [7, 7, 7], [8, 8, 8, 8, 8], [9, 9, 9, 9]]
如果你想将嵌套列表减少为一个列表,那么请按照下面的代码进行操作
from functools import reduce
scores = [6, 7, 8, 9]
frequency = [1, 3, 5, 4]
ls= [ [s]*f for s,f in zip(scores,frequency)]
single_ls=reduce(lambda x,y:x+y,ls)
print(single_ls)