Array into multiple arrays

删除回忆录丶 提交于 2020-01-06 06:48:05

问题


(Python) I have the following array

x=[1,2,3,4,5,6]

and I want this one

x=[[1,2],[2,3],[3,4],[4,5],[5,6]]

I used this function

def split(arr, size):
 arrs = []
 while len(arr) > size:
     pice = arr[:size]
     arrs.append(pice)
     arr   = arr[size:]
 arrs.append(arr)
 return arrs

But it only generates this

x=[[1,2],[3,4],[5,6]]

回答1:


I suppose you want to develop your own code and not use libraries or built-in functions.

Your code is fine.

There's just one simple mistake: change the slice index from size to 1 in this line arr = arr[size:], where 1 means size - (size-1)

def split(arr, size):
    arrs = []
    while len(arr) > size:
        pice = arr[:size]
        arrs.append(pice)
        arr  = arr[1:]
    arrs.append(arr)
    return arrs

output:

[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]

It also works for other sizes:

print split(x, 3)
print split(x, 4)

[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]]
[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]



回答2:


loop your array with index, then put [index : index+size] as one element of new array.

The codes will be like:

x=[1,2,3,4,5,6]
size = 2
print([x[index:index+size] for index in range(0, len(x)-size+1)])
size = 4
print([x[index:index+size] for index in range(0, len(x)-size+1)])

Output:

[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
[Finished in 0.189s]

or use zip() with size>1.

x=[1,2,3,4,5,6]
size = 2
print( [item for item in zip( *[x[index:len(x)+index-1] for index in range(0, size)])])
size = 4
print( [item for item in zip( *[x[index:len(x)+index-1] for index in range(0, size)])])

Output:

[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]
[Finished in 0.284s]



回答3:


You can use windowed() function from the more_itertools module.

from more_itertools import windowed
x = list(windowed(x, 2))

You can install it using pip

pip install more-itertools



回答4:


Try this :

def split(arr, size):
    return [x[i:i+size] for i in range(0,len(x)-size+1)]



回答5:


a = [1,2,3,4,5]

answer = list(map(list, zip(a, a[1:])))

print(answer)



回答6:


You can use fancy indexing when using NumPy. This will require x to be converted to a numpy array. You will also need to create an array of incidences labeled ind below

x=[1,2,3,4,5,6]
x = np.array(x)

ind = np.arange(len(x)-1)[:,None] + np.arange(2)

x[ind]

array([[1, 2],
       [2, 3],
       [3, 4],
       [4, 5],
       [5, 6]])


来源:https://stackoverflow.com/questions/49863276/array-into-multiple-arrays

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!