【问题标题】:How to split a list of arrays in decreasing order using split function in python?如何使用python中的split函数按降序拆分数组列表?
【发布时间】:2019-11-07 18:19:29
【问题描述】:

我正在尝试从用户获取数组输入并将数组拆分为子数组,每个子数组有 3 个元素。如果不。数组中的元素不能被 3 整除,我想将较小数组的大小从第一个子数组增加 1。

我尝试使用 split 函数,但这给了我按递增顺序排列的子数组。我希望它按降序排列。

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

我也需要排序方面的帮助

【问题讨论】:

  • 您可能必须自己计算拆分,并使用np.array_split
  • 你能帮帮我吗?
  • 你用过np.splilt(x,[3]); np.array_split(x, 2) 做你想做的事。

标签: arrays python-3.x numpy split


【解决方案1】:

第一个问题是您需要将数字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])]

【讨论】:

  • 我想要最后一个输出为 Output = [array([77, 34, 23,15]), array([13, 11, 7])]
  • 刚刚修改了我的答案
  • 我的代码出错了。它说 Output = [l[::-1] for l in Input][::-1] TypeError: 'int' object is not subscriptable
  • 我认为它在问题中给出的输入数组上运行良好。再次修改为更大的 x
  • 谢谢马特。这帮助我解决了拆分数组的排序和降序问题。感谢您的贡献。
【解决方案2】:
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')]

How does the numpy function `array_split` work mathematically?

【讨论】:

    猜你喜欢
    • 2013-06-16
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多