替换列表中的数字组(python)

时间:2017-04-29 12:25:48

标签: python python-3.x range

所以我做了两个清单:

The first = [0...600] and
the second:`
numbers = -10
listnum = [numbers]
for i in range (1,600,24):
    numbers += 1
    listnum.insert(i,numbers)

打印

 [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

我需要制作第三个列表,其中600个数字,但第一组24个数字将被-10替换,第二个用-9替换,依此类推。 我知道怎么做就像

那样艰难
for i in range (24):
        listnum.insert(i,listnum[0])
for i in range (24,48):
        listnum.insert(i,listnum[0])`

但我相信有更好的方法可以做到这一点。

2 个答案:

答案 0 :(得分:0)

试试这个:

[x for y in ([z] * 24 for z in listnum) for x in y]

答案 1 :(得分:0)

OP中有数学错误。我将假设第一个列表是范围(600),然后告诉如何获取范围(601)版本,以防它不是错误。请注意,你说它有600个项目,但如果你检查len(第一个),你会发现它有601个。如果从零到一个数字计数,你将有一个额外的数字(因为你计算为零)。因此,范围(600)中的最后一个数字是599。

你想要计数24的-10,然后计算24的-9,......,然后计算24的14。

我的第一个观察是第一个列表只是范围(600)或范围(601),它与使用循环计数器没有什么不同。所以我不会替代它;我只想制作一个新的清单。

通用方法是将所有重复项添加到子列表中,形成如下:

l = []
for n in range(-10, 25):
    l += [n] * 24

但是,由于这些都是数字,我们可以使用模运算轻松计算每个值。

[x/24-10 for x in range(600)]

或者匹配OP中的数学错误,我想你可能想要

[x/24-10 for x in range(601)]

最后将额外增加15个。

这种编写列表的方式是“列表理解”,您可以查找。这很常见。基本上,它将通过计算iterable中每个项目的数量“x / 24-10”来创建一个新列表,而iterable是range(),它通常用作计数器。