如何基于python中的数字列表生成一定数量的数字?
如何基于列表1创建以下数字的列表如何基于python中的数字列表生成一定数量的数字?,python,Python,如何基于列表1创建以下数字的列表 list1=[2,1,3] 例如: list1=[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 [1,1,2,3,3,3] (2) (1)(3)#这里有一种方法: list1=[2,1,3] list2 = [] for j, num in enum
list1=[2,1,3]
例如:
list1=[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
[1,1,2,3,3,3]
(2) (1)(3)#这里有一种方法:
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]
[1, 1, 2, 3, 3, 3]
使用标准for循环的解决方案,利用enumerate:
n = [2, 1, 3]
result = []
for i, x in enumerate(n, start=1):
result.extend([i] * x)
或者,作为一个班轮:
result = [i for i, j in enumerate(n, start=1) for k in range(j)]
您可以使用枚举()
:
输出:
[1, 1, 2, 3, 3, 3]
[1, 1, 2, 3, 3, 3]
我最初(低效)的回答是:
印刷品:
[1, 1, 2, 3, 3, 3]
回答基于@kaya3评论-更高效!(谢谢!):
要将字符串重复一定次数,可以使用乘法运算符,例如:
打印(“1”*5)
# 11111
此技巧可用于解决您的问题:
values=“132”
列表1=[2,1,3]
结果=[]
对于值,在zip中计数(值,列表1):
结果.扩展(值*计数)
打印(结果)
# -> ['1', '1', '3', '2', '2', '2']
您还可以使用int
列表:
值=[[1]、[2]、[3]]
列表1=[2,1,3]
结果=[]
对于值,在zip中计数(值,列表1):
结果.扩展(值*计数)
打印(结果)
# -> [1, 1, 2, 3, 3, 3]
我认为这是一个生成器,可以根据需要生成平坦的值。比如:
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]
已经有很多很好的答案了,但是像这样的问题都应该用英语来回答,所以我的解决方案是这样的
>a=[2,1,3]
>>>从itertools导入链,重复
>>>列表(chain.from_iterable(对枚举(a,1)中的i,v重复(i,v)))
[1, 1, 2, 3, 3, 3]
您尝试过什么吗?我尝试过一些想法,比如使用for循环生成数字量,但不确定如何进一步实现。欢迎使用。这也是一个面向专业和热心程序员的问答网站。我们的目标是为您的问题提供一些自己的代码,以显示您自己为解决此问题所做的研究工作。@DeepSpace这有什么低效之处?就效率而言,这个解决方案是不错的。线性时间和空间,这是你能做的最好的。一个改进,不要使用j=0
和j+=
,只使用为j,枚举中的num(列表1,1):为范围内的num(num):列表2。追加(j)
@juanpa.arrivillaga你是right@Sheri非常感谢你的回答。我理解这段代码,它对我来说非常有用。enumerate接受第二个参数,它是开始计数的初始值,不需要我+1@juanpa.arrivillaga哇!我不知道。谢谢。因为你的函数是一个生成器,它会产生结果,而不会自己生成一个列表——所以我建议不要把它叫做makeList
@kaya3,这是一个很好的观点。编辑为什么不直接写结果。扩展([value]*count)
而不是要求输入采用不同的格式?当然可以。[i为i,v在枚举(l,1)中为u为范围(v)]
可以避免创建大量临时列表。@kaya3这是真的,我将编辑答案,注意使用sum
连接列表集合需要O(n^2)个时间。可以更进一步:list(chain.from_iterable(starmap(repeat,enumerate(a,1)))
。
print( [i for i, v in enumerate(l, 1) for _ in range(v)] )
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]