【问题标题】:Sort given 2d array in order of ascending by python3.x按 python3.x 升序对给定的二维数组进行排序
【发布时间】:2022-01-20 16:05:33
【问题描述】:

我是python初学者,请帮我解决这个python案例。

对给定的二维数组按升序排序。将二维数组展平,并对其进行排序,使得第一个排序顺序是第一个数字,第二个排序顺序是第二个数字'''#示例:

input_arr = [
    ['55-29', '55-32', '62-3', '84-38'],
    ['36-84', '23-53', '22-58', '48-15'],
    ['72-80', '48-6', '11-86', '73-23'],
    ['93-51', '55-11', '93-49', '72-10'],
    ['93-66', '71-32', '16-75', '55-9']
]
 ouput_arr = ['11-86', '16-75', '22-58', '23-53', '36-84', '48-6', '48-15', '55-9', '55-11', '55-29', '55-32', '62-3', '71-32', '72-10', '72-80', '73-23', '84-38', '93-49', '93-51', '93-66'] 

def sort_2d_array(input_arr=input_arr) -> list:    
    #TODO
    pass 

【问题讨论】:

标签: python arrays sorting


【解决方案1】:

试试这个 您需要像这样将列表展平为单个列表

tmp = [t for x in input_arr for t in x]

然后根据-之前的第一个元素进行排序,像这样

print(list(sorted(tmp,key=lambda x: int(x.split('-')[0]))))

这将为您提供所需的输出。

['11-86', '16-75', '22-58', '23-53', '36-84', '48-15', '48-6', '55-29', '55-32', '55-11', '55-9', '62-3', '71-32', '72-80', '72-10', '73-23', '84-38', '93-51', '93-49', '93-66']

第二种情况你可以试试

print(list(sorted(tmp,key=lambda x: (int(x.split('-')[0]) , int(x.split('-')[1])))))

这会给你

['11-86', '16-75', '22-58', '23-53', '36-84', '48-6', '48-15', '55-9', '55-11', '55-29', '55-32', '62-3', '71-32', '72-10', '72-80', '73-23', '84-38', '93-49', '93-51', '93-66']

【讨论】:

  • 这不会对-之后的部分进行第二次排序
  • @JacquesGaudin 感谢您指出
猜你喜欢
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2013-08-17
  • 2021-04-11
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多