从Python中的数字列表创建五个元素的列表

时间:2018-10-05 09:13:12

标签: python list tuples

我正在使用Python 3.7。

我有一个这样的数字元组:

 x = ((1,2,3,4,5,6,7,8,9....etc))

我想以迭代方式从列表中获得一个列表,该列表除以100并得到五个数字,就像这样:

[[[0.0], [0.01], [0.02], [0.03], [0.04]],
[[0.01], [0.02], [0.03], [0.04], [0.05]],
[[0.02], [0.03], [0.04], [0.05], [0.06]],
[[0.03], [0.04], [0.05], [0.06], [0.07]],
[[0.04], [0.05], [0.06], [0.07], [0.08]],
[[0.05], [0.06], [0.07], [0.08], [0.09]],... etc

我尝试过此方法,但无法正常工作:

Data = [[[(interest_over_time_data+j)/100] for 
interest_over_time_data in range(5)]for j in 
interest_over_time_data]

实数不是连续数字的列表,因此我无法为每个元素加+1 ...

提前谢谢!

4 个答案:

答案 0 :(得分:2)

  • 您想要一个列表列表,需要双重列表理解。
  • 您想要滑动窗口以进行切片,最好使用itertools.islice

下面的代码创建5个滑动的子列表,每个列表有100个分区。

import itertools

x = (1,2,3,4,5,6,7,8,9)
result = [[v/100.0 for v in itertools.islice(x,start,start+5)] for start in range(6)]

结果:

[[0.01, 0.02, 0.03, 0.04, 0.05], 
 [0.02, 0.03, 0.04, 0.05, 0.06], 
 [0.03, 0.04, 0.05, 0.06, 0.07], 
 [0.04, 0.05, 0.06, 0.07, 0.08], 
 [0.05, 0.06, 0.07, 0.08, 0.09],
 [0.06, 0.07, 0.08, 0.09]]

答案 1 :(得分:2)

您可以将第三方NumPy用于基于数组的解决方案:

import numpy as np

first_row = np.arange(5) / 100
first_col = np.arange(10) / 100

res = first_row + first_col[:, None]

array([[ 0.  ,  0.01,  0.02,  0.03,  0.04],
       [ 0.01,  0.02,  0.03,  0.04,  0.05],
       [ 0.02,  0.03,  0.04,  0.05,  0.06],
       [ 0.03,  0.04,  0.05,  0.06,  0.07],
       [ 0.04,  0.05,  0.06,  0.07,  0.08],
       [ 0.05,  0.06,  0.07,  0.08,  0.09],
       [ 0.06,  0.07,  0.08,  0.09,  0.1 ],
       [ 0.07,  0.08,  0.09,  0.1 ,  0.11],
       [ 0.08,  0.09,  0.1 ,  0.11,  0.12],
       [ 0.09,  0.1 ,  0.11,  0.12,  0.13]])

答案 2 :(得分:1)

爱一线解决方案:

[[[x[p]/100] for p in range(k,k+5)] for k in range(len(x)-4)]

#>[[[0.01], [0.02], [0.03], [0.04], [0.05]],
#> [[0.02], [0.03], [0.04], [0.05], [0.06]],
#> [[0.03], [0.04], [0.05], [0.06], [0.07]],
#> [[0.04], [0.05], [0.06], [0.07], [0.08]],
#> [[0.05], [0.06], [0.07], [0.08], [0.09]]]

答案 3 :(得分:1)

好的,您希望您的输出包含从x的第一个元素到最后一个元素的5个长度的列表。因此,您的输出将包含n-4个列表,其中nlen(x)

所以我们首先需要遍历range(len(x)-4)

然后,我们要从给定偏移量x开始的i中五个元素。我们可以为此使用切片,例如x[i:i+5]

我们希望此子列表的所有元素都除以100

所有这些都包含在列表理解中,就像这样:

x = (1,2,3,4,5,6,7,8,9)
res = [
    [j/100.0 for j in x[i:i+5]]
        for i in range(len(x)-4)
]
print(res)

产生的结果

[[0.01, 0.02, 0.03, 0.04, 0.05],
 [0.02, 0.03, 0.04, 0.05, 0.06],
 [0.03, 0.04, 0.05, 0.06, 0.07],
 [0.04, 0.05, 0.06, 0.07, 0.08],
 [0.05, 0.06, 0.07, 0.08, 0.09]]

或者如果您想在示例输出中使用0.0

x = (1,2,3,4,5,6,7,8,9)
x = [0] + list(x)
res = [
    [j/100.0 for j in x[i:i+5]]
        for i in range(len(x)-4)
]
print(res)