Delgus
@Delgus

Пользовательские сортировки в python?

Как отсортировать список в Python по алфавиту, но чтобы пустые строки шли в конце
# имеем такой список
a = ['a', 'c', 'b', 'f', '', 'i', 'd'] 
# нужен такой
 ['a', 'b', 'c', 'd', 'f', 'i', '']


Я представляю как это сделать в PHP
$array = ["","a","d","e","","b","c","c",""];

usort($array, function($left,$right){
    if ($left == "") {
        return 1;
    }
    if ($right == "") {
        return 0;
    }
    return $left > $right;
});
              
print_r($array);

sandbox.onlinephpfunctions.com/code/7d9830ed597f2e...

Я представляю как сделать это в Golang
package main

import (
	"fmt"
	"sort"
)

func main() {
	slice := []string{"", "a", "d", "e", "", "b", "c", "c", ""}
	sort.Slice(slice, func(left, right int) bool {
		if slice[left] == "" {
			return false
		}
		if slice[right] == "" {
			return true
		}
		return slice[left] < slice[right]
	})
	fmt.Println(slice)
}

https://play.golang.org/p/WXr16nnnpc0

Я представляю как сделать это на JS
arr = ["","a","d","e","","b","c","c",""];
arr.sort(function(left,right){
  console.log(left);
   if (left == ""){
    return 1;
  }
  if (right == ""){
    return 0;
  }
  return left > right;
});
console.log(arr);


Но я никак не могу найти способа как сделать подобную сортировку в Python. Прошу помочь и не кидаться камнями)
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
longclaps
@longclaps
arr = ["", "a", "d", "e", "", "b", "c", "c", ""];
arr.sort(key=lambda s: s or "zzzzz")
print(arr)

Вместо "zzzzz" возьми по ситуации то, что заведомо лексикографически больше любой валидной строки, да хоть chr(127), если речь идёт о латинице.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы