Создание списка из пяти элементов из списка номеров в Python - PullRequest
0 голосов
/ 05 октября 2018

Я использую 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 голосов
/ 05 октября 2018

Вы можете использовать стороннюю 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]])
0 голосов
/ 05 октября 2018

Хорошо, вы хотите, чтобы ваш вывод, содержащий списки длиной 5, сдвигался от первого элемента x к последнему.Поэтому ваш вывод будет содержать n-4 списков, где n равно len(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)
0 голосов
/ 05 октября 2018
  • Вам нужен список списков, который требует понимания двойного списка.
  • Вам нужны скользящие окна, которые требуют нарезки, лучше сделать с помощью 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]]
0 голосов
/ 05 октября 2018

Любите одну линию решений:

[[[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]]]
...