Py学习  »  Python

如何根据python中的数字列表生成数量?

ScarletCoder16 • 5 年前 • 1994 次点击  

如何根据list1创建以下数字的列表?

list1=[2,1,3]

列表1=[2,1,3]

[1, 1, 2, 3, 3, 3] 
 (2)  (1)   (3) #<-- Ignore this part, I just put it to give you more detail of my question

上面,我想打印 (2) 以及 (3)因为列表1=[ , ,

在python3里有什么有效的方法可以做到吗? (-抱歉,我是新来的堆栈溢出,请原谅我没有有效的提问)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53242
文章 [ 8 ]  |  最新文章 5 年前
user10987432
Reply   •   1 楼
user10987432    5 年前
lengths = [2, 1, 3]

result = sum([[number] * length for number, length in enumerate(lengths, start=1)], [])
print(result)

输出:

[1, 1, 2, 3, 3, 3]
Laurent LAPORTE
Reply   •   2 楼
Laurent LAPORTE    5 年前

print("1" * 5)
# 11111

values = "132"
list1 = [2, 1, 3]
result = []
for value, count in zip(values, list1):
    result.extend(value*count)
print(result)
# -> ['1', '1', '3', '2', '2', '2']

您还可以使用 int

values = [[1], [2], [3]]
list1 = [2, 1, 3]
result = []
for value, count in zip(values, list1):
    result.extend(value*count)
print(result)
# -> [1, 1, 2, 3, 3, 3]
kaya3
Reply   •   3 楼
kaya3    5 年前

itertools ,这是我的解决方案。

>>> a = [2, 1, 3]
>>> from itertools import chain, repeat
>>> list(chain.from_iterable(repeat(i, v) for i, v in enumerate(a, 1)))
[1, 1, 2, 3, 3, 3]
Andrej Kesely
Reply   •   4 楼
Andrej Kesely    5 年前

l = [2, 1, 3]

print([j for i, v in enumerate(l, 1) for j in [i] * v])

印刷品:

[1, 1, 2, 3, 3, 3]

答案基于@kaya3评论-更有效!(谢谢!):

print( [i for i, v in enumerate(l, 1) for _ in range(v)] )
N Chauhan
Reply   •   5 楼
N Chauhan    5 年前

n = [2, 1, 3]
result = []
for i, x in enumerate(n, start=1):
    result.extend([i] * x)

或者,作为一行:

result = [y for x in [[i] * j for i, j in enumerate(n, start=1)] for y in x]
Mark Meyer
Reply   •   6 楼
Mark Meyer    5 年前

我认为这是一个生成器,可以根据需要生成扁平化的值。类似于:

list1=[2,1,3]

def expandIndices(l):
    for i, n in enumerate(l,1):
        yield from [i] * n

list(expandIndices(list1))
# [1, 1, 2, 3, 3, 3]
Alec Alameddine
Reply   •   7 楼
Alec Alameddine    5 年前

enumerate() :

n = [2, 1, 3]
result = []
for i, j in enumerate(n, start=1):
    result.extend([i] * j)
Sheri
Reply   •   8 楼
Sheri    5 年前

有一种方法:

list1=[2,1,3]
list2 = []
for j, num in enumerate(list1, 1):
    for _ in range(num):
        list2.append(j)

print(list2)

输出:

[1, 1, 2, 3, 3, 3]