在Python中重新排列数组

时间:2019-05-15 11:30:52

标签: python python-3.x

我有多个数组,它们在其中意外地“切换”了值。

我有三个应该是的numpy数组:

a=[1 2 3 4], b=[7 8 9 10], c=[11 12 13 14]

但是,它们是当前格式:

a=[1 2 9 10], b=[7 8 13 14], c=[11 12 3 4]

可以编写哪些代码使数组按上述顺序排列?请注意,我不知道发生“切换”的索引。

5 个答案:

答案 0 :(得分:3)

由于需要有序的值,因此可以先concatenate三个数组,然后依次sortreshape以获得单个数组

a=np.array([1, 2, 9, 10])
b=np.array([7, 8, 13, 14])
c=np.array([11, 12, 3, 4])

a, b, c = np.sort(np.concatenate((a,b,c))).reshape((3, 4))
a, b, c
# (array([1, 2, 3, 4]), array([ 7,  8,  9, 10]), array([11, 12, 13, 14]))

答案 1 :(得分:2)

您可以将所有三个列表附加在一起,对其进行排序,然后使用列表理解将列表重新分为三部分

a=[1, 2, 9 ,10]
b=[7 ,8, 13, 14]
c=[11 ,12, 3, 4]

#Append elements and sort them together
li = sorted(a+b+c)

#Resplit the list into 3 parts
a, b, c = [li[idx:idx+4] for idx in range(0,len(li),4)]

print(a,b,c)

输出将为

[1, 2, 3, 4] [7, 8, 9, 10] [11, 12, 13, 14]

答案 2 :(得分:2)

使用numpy.concatenate()numpy.reshape()

例如:

import numpy as np

a=np.array([1, 2, 9, 10]) 
b=np.array([7, 8, 13, 14])
c=np.array([11, 12, 3, 4])


main = np.concatenate((a, b, c))
main.sort()
a, b, c = main.reshape(3, 4)
print(a)   #[1 2 3 4]
print(b)   #[ 7  8  9 10]
print(c)   #[11 12 13 14]

答案 3 :(得分:1)

您可以创建一个包含所有元素的列表,对该列表进行排序并再次拆分:

>>> a = [1, 2, 9, 10]
>>> b = [7, 8, 13, 14]
>>> c = [11, 12, 3, 4]
>>> s = sorted(a + b + c)
>>> a, b, c = s[:4], s[4:8], s[8:]
>>> a, b, c
([1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14])

答案 4 :(得分:1)

您可以通过合并所有数组然后调整输出大小来实现此目的:

import numpy
a = numpy.array([1,2,9,10])
b = numpy.array([7,8,13,14])
c = numpy.array([11,12,3,4])

# merge, sort and reshape your arrays
d = numpy.sort(numpy.concatenate((a, b, c))).reshape(3,4)

# asssign them back
a,b,c = d
print(a)
print(b)
print(c)

Try it online!

相关问题