Classificação da lista Python com base no comprimento da string
110
Quero classificar uma lista de strings com base no comprimento da string. Tentei usar classificar da seguinte maneira, mas não parece me dar o resultado correto.
Quando você passa um lambdato sort, você precisa retornar um inteiro, não um booleano. Portanto, seu código deve ser o seguinte:
xs.sort(lambda x,y: cmp(len(x), len(y)))
Observe que cmp é uma função embutida que cmp(x, y)retorna -1 se xfor menor que y, 0 se xfor igual a ye 1 se xfor maior quey .
Claro, você pode usar o keyparâmetro:
xs.sort(key=lambda s: len(s))
Isso diz ao sortmétodo para fazer o pedido com base no que quer que a função da tecla retorne.
EDITAR: Obrigado a balpha e Ruslan abaixo por apontar que você pode simplesmente passar lendiretamente como o parâmetro chave para a função, eliminando assim a necessidade de lambda:
xs.sort(key=len)
E, como Ruslan aponta abaixo, você também pode usar a função de classificação integrada em vez do list.sortmétodo, que cria uma nova lista em vez de classificar a existente no local:
Isso classificará em ordem ascendente (comprimento menor das palavras no topo), para classificar em ordem decrescente (comprimento menor das palavras na parte inferior) adicione um parâmetro reverso = Verdadeiro
Ajay Gupta
O xs.sort()lance "TypeError: sort () não leva argumentos posicionais". Em vez disso, deveria serxs.sort(key=lambda x: len(x))
Hi-Angel
84
O mesmo da resposta de Eli - apenas usando uma forma mais curta, porque você pode pular um lambda parte aqui.
@ user2922935: Você pode fazer xs [:: - 1] para reverter a lista já classificada. Confira o artigo de Dan Bader aqui: dbader.org/blog/python-reverse-list
Thyag
7
xs.sort(key=len, reverse=True)
Raz
5
Eu gostaria de adicionar como a função da tecla pítônica funciona durante a classificação:
Padrão de Design Decorate-Sort-Undecorate:
O suporte do Python para uma função chave durante a classificação é implementado usando o que é conhecido como padrão de design decorar-classificar-não-decorar.
Ele prossegue em 3 etapas:
Cada elemento da lista é temporariamente substituído por uma versão “decorada” que inclui o resultado da função-chave aplicada ao elemento.
A lista é classificada com base na ordem natural das chaves.
Os elementos decorados são substituídos pelos elementos originais.
Parâmetro chave para especificar uma função a ser chamada em cada elemento da lista antes de fazer comparações. docs
Escreva uma função lensort para classificar uma lista de strings com base no comprimento.
def lensort(a):
n = len(a)for i in range(n):for j in range(i+1,n):if len(a[i])> len(a[j]):
temp = a[i]
a[i]= a[j]
a[j]= temp
return a
print lensort(["hello","bye","good"])
def lensort(list_1):
list_2=[];list_3=[]for i in list_1:
list_2.append([i,len(i)])
list_2.sort(key =lambda x : x[1])for i in list_2:
list_3.append(i[0])return list_3
Posso fazer isso usando os dois métodos abaixo, usando a função
def lensort(x):
list1 =[]for i in x:
list1.append([len(i),i])return sorted(list1)
lista =['a','bb','ccc','dddd']
a=lensort(lista)print([l[1]for l in a])
Em um Liner usando Lambda, conforme abaixo, a já respondida acima.
lista =['a','bb','ccc','dddd']
lista.sort(key =lambda x:len(x))print(lista)
lambda
; apenas usekey = len
xs.sort()
lance "TypeError: sort () não leva argumentos posicionais". Em vez disso, deveria serxs.sort(key=lambda x: len(x))
O mesmo da resposta de Eli - apenas usando uma forma mais curta, porque você pode pular um
lambda
parte aqui.Criando nova lista:
Classificação no local:
fonte
xs.sort(key=len, reverse=True)
Eu gostaria de adicionar como a função da tecla pítônica funciona durante a classificação:
Padrão de Design Decorate-Sort-Undecorate:
O suporte do Python para uma função chave durante a classificação é implementado usando o que é conhecido como padrão de design decorar-classificar-não-decorar.
Ele prossegue em 3 etapas:
Cada elemento da lista é temporariamente substituído por uma versão “decorada” que inclui o resultado da função-chave aplicada ao elemento.
A lista é classificada com base na ordem natural das chaves.
Os elementos decorados são substituídos pelos elementos originais.
Parâmetro chave para especificar uma função a ser chamada em cada elemento da lista antes de fazer comparações. docs
fonte
A maneira mais fácil de fazer isso é:
fonte
Escreva uma função lensort para classificar uma lista de strings com base no comprimento.
fonte
Isso funciona para mim!
fonte
Posso fazer isso usando os dois métodos abaixo, usando a função
Em um Liner usando Lambda, conforme abaixo, a já respondida acima.
fonte