Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用频率列表创建列表_Python_Python 3.x - Fatal编程技术网

在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再次查看,我更正了它