Переупорядочивание строк в двумерных массивах без numpy

#python #arrays #row

Вопрос:

Строки в 2D-массиве упорядочиваются в соответствии с числом «*» в каждой строке.

Пример:

Мой массив:

 [['*', '-', '*', '*', '*', '*'],
 ['*', '-', '-', '*', '-', '-'],
 ['-', '*', '*', '-', '-', '-'],
 ['*', '-', '*', '*', '-', '-'],
 ['-', '-', '*', '*', '*', '*']]

Expected output:

[['*', '-', '*', '*', '*', '*'],
 ['-', '-', '*', '*', '*', '*'],
 ['*', '-', '*', '*', '-', '-'],
 ['*', '-', '-', '*', '-', '-'],
 ['-', '*', '*', '-', '-', '-']]
 

Строка с наибольшим количеством * будет расположена первой, в то время как строка с наименьшим количеством - будет расположена последней. Если строк одинаковое количество * , сохраняется относительный порядок.

Комментарии:

1. Поскольку количество записей во внутреннем списке постоянно, наличие наибольшего числа * будет означать наименьшее количество -, Так что вы подразумеваете под строкой с наибольшим количеством*, которая будет расположена первой, в то время как строка с наименьшим количеством — будет расположена последней. Они, кажется, противоречат друг другу

Ответ №1:

Сортировка с помощью соответствующей ключевой функции будет выполнена:

 array = [['*', '-', '*', '*', '*', '*'],
         ['*', '-', '-', '*', '-', '-'],
         ['-', '*', '*', '-', '-', '-'],
         ['*', '-', '*', '*', '-', '-'],
         ['-', '-', '*', '*', '*', '*']]

array.sort(key=lambda a: a.count('*'), reverse=True)
array
#[['*', '-', '*', '*', '*', '*'],
# ['-', '-', '*', '*', '*', '*'],
# ['*', '-', '*', '*', '-', '-'],
# ['*', '-', '-', '*', '-', '-'],
# ['-', '*', '*', '-', '-', '-']]