通过重复固定范围的值来扩展列表

时间:2018-03-02 10:37:23

标签: python list append

我有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

1 个答案:

答案 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