Как разделить список массивов в порядке убывания, используя функцию разделения в Python? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить входные данные массива от пользователя и разбить массивы на подмассивы с 3 элементами на каждом. Если нет. элементов в массиве не делится поровну на 3, я хочу увеличить размер меньших массивов на 1 из первого подмассива.

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

import numpy as np
def array_list(x):

  original_list = []
  for i in range (0,x):
    abc = input("Enter element: ")
    original_list.append(abc)
  original_list.sort()
  return(original_list)

x = int(input("Enter no. of elements: "))
Input = array_list(x)
print("Input = ",Input)
print("Output = ",np.split(Input,[3]))

Мой код выполняется следующим образом: *

Input =  ['11', '13', '15', '23', '34', '7', '77']  
Output =  [array(['11','13','15']),array(['23','34','7','77']]

Я ожидаю, что мой вывод:

Input =  ['11', '13', '15', '23', '34', '7', '77']    
Output = [array(['11','13','15',23], array(['34','7', '77']  

Также мне нужнопомощь в сортировке

Ответы [ 2 ]

1 голос
/ 07 ноября 2019
In [16]: x = np.array(['11', '13', '15', '23', '34', '7', '77'])                
In [17]: np.array_split(x,[4,3])                                                
Out[17]: 
[array(['11', '13', '15', '23'], dtype='<U2'),
 array([], dtype='<U2'),
 array(['23', '34', '7', '77'], dtype='<U2')]

Предварительный способ вычисления разделения:

In [25]: s = x.shape[0]                                                         
In [26]: cnt = s//3                                                             
In [27]: extra = s%3                                                            
In [28]: alist = [3+1]*extra + [3]*(cnt-extra)                                  
In [29]: alist                                                                  
Out[29]: [4, 3]

Но подождите, array_split делает это уже так:

In [33]: np.array_split(x,2)                                                    
Out[33]: 
[array(['11', '13', '15', '23'], dtype='<U2'),
 array(['34', '7', '77'], dtype='<U2')]

Какфункция numpy `array_split` работает математически?

1 голос
/ 07 ноября 2019

Первая проблема - вам нужно преобразовать число abc в int (как вы это делали для x), чтобы отсортировать число. Чтобы разделить массив, как вы хотите, вы можете повернуть массив перед разделением.

import numpy as np


def array_list(x):
    original_list = []
    for i in range(0, x):
        abc = int(input("Enter element: "))
        original_list.append(abc)
    original_list.sort(reverse=True)
    return original_list


x = int(input("Enter no. of elements: "))
Input = array_list(x)
print("Input = ", Input)
Output = np.array_split(Input, int(x/3)) if x >= 3 else Input
print("Output = ", Output)
# test 1
Enter no. of elements: 7
Input =  [77, 34, 23, 15, 13, 11, 7]
Output =  [array([77, 34, 23, 15]), array([13, 11,  7])]

# test 2
Enter no. of elements: 8
Input =  [77, 45, 34, 23, 15, 13, 11, 7]
Output =  [array([77, 45, 34, 23]), array([15, 13, 11,  7])]

# test 3
Enter no. of elements: 9
Input =  [99, 77, 45, 34, 23, 15, 13, 11, 7]
Output =  [array([99, 77, 45]), array([34, 23, 15]), array([13, 11,  7])]
...