如何简化代码以在数组列表的开头和结尾添加数字?

时间:2019-04-03 12:25:54

标签: python arrays numpy

我有一个数字列表,我想将其拆分为仅包含连续数字块的单独数组。第二步,我想在列表中创建的每个数组的第一个元素和最后一个元素之后添加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.如何编写一个函数,该函数将找到每个数组的第一个和最后一个元素并添加x个项目?

这将是实现我要做的事情的一种更加模块化的方法。我只是停留在此功能的外观。

1 个答案:

答案 0 :(得分:0)

这是一个代码示例

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