python - que - clasificación de la lista insensible a mayúsculas y minúsculas, sin minúsculas?
programa que diga si es mayuscula o minuscula (6)
En python3 puedes usar
list1.sort(key=lambda x: x.lower()) #Case In-sensitive
list1.sort() #Case Sensitive
Tengo una lista de cadenas como esta:
[''Aden'', ''abel'']
Quiero ordenar los elementos, no distingue entre mayúsculas y minúsculas. Entonces quiero obtener:
[''abel'', ''Aden'']
Pero obtengo el opuesto con sorted()
o list.sort()
, porque mayúsculas aparece antes que minúsculas.
¿Cómo puedo ignorar el caso? He visto soluciones que implican la minoría de todos los elementos de la lista, pero no quiero cambiar el caso de los elementos de la lista.
Lo hice de esta manera para Python 3.3:
def sortCaseIns(lst):
lst2 = [[x for x in range(0, 2)] for y in range(0, len(lst))]
for i in range(0, len(lst)):
lst2[i][0] = lst[i].lower()
lst2[i][1] = lst[i]
lst2.sort()
for i in range(0, len(lst)):
lst[i] = lst2[i][1]
Entonces solo puedes llamar a esta función:
sortCaseIns(yourListToSort)
Lo siguiente funciona en Python 2:
sorted_list = sorted(unsorted_list, key=lambda s: s.lower())
Funciona para cadenas tanto normales como unicode, ya que ambas tienen un método lower
.
En Python 2 funciona para una mezcla de cadenas normales y unicode, ya que los valores de los dos tipos se pueden comparar entre sí. Sin embargo, Python 3 no funciona así: no se puede comparar una cadena de bytes y una cadena unicode, por lo que en Python 3 debes hacer lo que se dice sano y solo ordenar las listas de un tipo de cadena.
>>> lst = [''Aden'', u''abe1'']
>>> sorted(lst)
[''Aden'', u''abe1'']
>>> sorted(lst, key=lambda s: s.lower())
[u''abe1'', ''Aden'']
Desde python 3.3, también existe el método str.casefold
específicamente diseñado para la coincidencia de celdas y se puede usar en lugar de str.lower
:
sorted_list = sorted(unsorted_list, key=lambda s: s.casefold())
Prueba esto
def cSort(inlist, minisort=True):
sortlist = []
newlist = []
sortdict = {}
for entry in inlist:
try:
lentry = entry.lower()
except AttributeError:
sortlist.append(lentry)
else:
try:
sortdict[lentry].append(entry)
except KeyError:
sortdict[lentry] = [entry]
sortlist.append(lentry)
sortlist.sort()
for entry in sortlist:
try:
thislist = sortdict[entry]
if minisort: thislist.sort()
newlist = newlist + thislist
except KeyError:
newlist.append(entry)
return newlist
lst = [''Aden'', ''abel'']
print cSort(lst)
Salida
[''abel'', ''Aden'']
También puedes probar esto:
>>> x = [''Aden'', ''abel'']
>>> x.sort(key=lambda y: y.lower())
>>> x
[''abel'', ''Aden'']
>>> x = [''Aden'', ''abel'']
>>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode
[''abel'', ''Aden'']
En Python 3 str
es unicode pero en Python 2 puedes usar este enfoque más general que funciona tanto para str
como para unicode
:
>>> sorted(x, key=lambda s: s.lower())
[''abel'', ''Aden'']