在Python中使用频率列表创建列表
我们如何创建一个新列表,根据另一个列表多次添加一个列表中的项目在Python中使用频率列表创建列表,python,python-3.x,Python,Python 3.x,我们如何创建一个新列表,根据另一个列表多次添加一个列表中的项目 感谢使用itertools和zip Ex: age = [19, 20, 21, 22, 23, 24, 25] frequency = [2, 1, 1, 3, 2, 1, 1] output_age = [19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25] from itertools import chain age = [19, 20, 21, 22, 23, 24, 25] frequ
感谢使用
itertools
和zip
Ex:
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
output_age = [19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
from itertools import chain
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
print( list(chain.from_iterable([[i] * v for i,v in zip(age, frequency)])) )
输出:
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
output_age = [19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
from itertools import chain
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
print( list(chain.from_iterable([[i] * v for i,v in zip(age, frequency)])) )
- 注意:
展开列表链。从\u iterable
[19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
为什么? 我们首先将
zip
和age
和frequency
列表放在一起,这样我们就可以一致地对它们进行迭代。因此:
output_age = [i for l in ([a]*f for a, f in zip(age, frequency)) for i in l]
#[19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
给出:
for a, f in zip(age, frequency):
print(a, f)
然后我们要重复每个元素,a
,重复次数与f
确定的次数相同。这可以通过创建一个列表并将其相乘来实现。就像:
19 2
20 1
21 1
22 3
23 2
24 1
25 1
然后,我们需要解压这些值,以便将该表达式包装在生成器中(用括号表示),并对其进行迭代。这将使列表变得平坦。请注意,实现这一点有多种方法(例如使用itertools.chain.from\u iterable
)
另一种方法是通过在
范围
对象上迭代,而不是乘以列表来获得重复,从而重复编号a
此方法类似于:
[4] * 3
#[4, 4, 4]
你需要:
output_age = [a for a, f in zip(age, frequency) for _ in range(f)]
#[19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
输出:
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
output_age = [19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
from itertools import chain
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
print( list(chain.from_iterable([[i] * v for i,v in zip(age, frequency)])) )
[19,19,20,21,22,22,22,23,23,24,25]最简单、最容易理解的方法
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
new_list = zip(age, frequency)
output_age=[]
for x,y in new_list:
for i in range(y):
output_age.append(x)
下面是一个使用
zip
和range
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
output_age = []
for age, freq in zip(age, frequency):
for _ in range(freq):
output_age.append(age)
您也可以使用
sum
功能执行此操作,但不建议对生产代码执行此操作:
>>> age = [19, 20, 21, 22, 23, 24, 25]
>>> frequency = [2, 1, 1, 3, 2, 1, 1]
>>> [a for a,f in zip(age, frequency) for _ in range(f)]
[19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
输出:
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
output_age = sum([[age[i]] * frequency[i] for i in range(len(age))],[])
print(output_age)
“依赖于另一个列表的次数”你到底是什么意思?项目数量或其值或?谢谢,但这不太正确,这导致输出年龄=[[19,19],[20],[21],[22,22],[23,23],[24],[25]。@jr100再次查看,我更正了它