我有3个不同范围的列表,并希望通过重复具有较低范围的列表的数字序列来对齐范围。最后,所有列表应该具有范围50.列表2当前具有30的范围。因此,前20个元素必须重复达到50.列表3当前具有15的范围。因此,列表将是完全重复两次,第五次重复将在5个元素后停止(50-15 = 35个要填充的元素)。
counter = 0
total = 0
number = int(raw_input("Enter any number: "))
while number != -1:
counter += 1
total += number
number = int(raw_input("Enter another number: "))
if counter == 0:
counter = 1 # Prevent division by zero
print total / counter
答案 0 :(得分:1)
您可以这样做:
import numpy as np
L = 50
arrs = [np.linspace(0, 49, 50), np.linspace(0, 29, 30), np.linspace(0, 14, 15)]
arrs = [np.r_[np.tile(a, L // len(a)), a[:L % len(a)]] for a in arrs]
arrs
的内容:
[array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,
11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,
22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,
33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,
44., 45., 46., 47., 48., 49.]),
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,
11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,
22., 23., 24., 25., 26., 27., 28., 29., 0., 1., 2.,
3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 15., 16., 17., 18., 19.]),
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,
11., 12., 13., 14., 0., 1., 2., 3., 4., 5., 6.,
7., 8., 9., 10., 11., 12., 13., 14., 0., 1., 2.,
3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 0., 1., 2., 3., 4.])]
击穿
np.tile
字面上“平铺”一个数组,也就是说,它连接同一个数组的几个副本。这里np.tile(a, L // len(a))
平铺的次数与所需长度L
和数组长度len(a)
的整数除法一样多;对于50,它将是1,对于15,它将是2,对于60,它将是0。a[:L % len(a)]
从数组的开头取一个切片,以L
为其模数。这是您需要填充L
元素的数组的最终“部分副本”。对于50,它将为0,对于15将为5,对于60将为50.在所有情况下,请注意显然len(a) * (L // len(a)) + (L % len(a)) = L
,这意味着连接这两个部分的结果将始终具有{{1} }}。np._r
只是缩写语法,在这种情况下,沿着第一维连接。在这里,它相当于L
。