Как упростить код для добавления чисел в начало и конец списка массивов? - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть список чисел, которые я хочу разбить на отдельные массивы, которые содержат только последовательные куски чисел.В качестве второго шага я хотел бы добавить число x последовательных элементов перед первым и после последнего элемента каждого массива, созданного в моем списке.

Это код, который я нашел в качестве решения:

import numpy as np

test_list = (1,2,3,11,12,13,24,25,70,101)
test_list_array = np.asarray(test_list)

#### add 3 items one by one at the end 
test_list_array_plus1 = test_list_array +1
test_list_array_plus2 = test_list_array_plus1 +1
test_list_array_plus3 = test_list_array_plus2 +1

### add 3 items one by one preceding 1st element 
test_list_array_min1 = test_list_array -1
test_list_array_min2 = test_list_array_min1 -1
test_list_array_min3 = test_list_array_min2 -1

### put all items together 
test_list_array_compl = np.concatenate((test_list_array, test_list_array_plus1, test_list_array_plus2, test_list_array_plus3, test_list_array_min1, test_list_array_min2, test_list_array_min3))

### sort them and get rid of duplicates
test_list_array_sorted = np.sort(test_list_array_compl)
test_list_array_uniq = np.unique (test_list_array_sorted)

### add consecutive items in separate arrays in a list 
def consecutive(data, stepsize=1):
    return np.split(data, np.where(np.diff(data) != stepsize)[0]+1)

test_expanded_by3_no_cons = consecutive(test_list_array_uniq) #get new expanded list
test_list_original_no_cons = consecutive(test_list) #get original list 

Проблема сейчас в том, что это нелегко реализовать решение, если, например, мой исходный список содержит элементы, которые будут разделены на массивы с одним номером и к которым я хотел бы добавить 10 последовательныхпредметы как в начале, так и в конце.

Любые идеи о том, как я могу изменить код, чтобы я мог.1. сначала разбить исходный список на список массивов последовательных элементов (это я уже могу сделать).2. Как я могу написать функцию, которая найдет 1-й и последний элемент каждого массива и добавит х элементов?

Это был бы более модульный подход к реализации того, что я хотел бы сделать.Я просто застрял в том, как эта функция будет выглядеть.

1 Ответ

0 голосов
/ 03 апреля 2019

Вот пример кода

a = [1,2]
b = [10,11]
oldlist = np.asarray([a,b])
newlist =[np.concatenate([ [x[0]-i-1 for i in reversed(range(3))], x, [x[-1]+i+1 for i in range(3)] ]) for x in oldlist]

Результат

newlist = [[-2,-1,0,1,2,3,4,5],[7,8,9,10,11,12,13,14]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...