我有一个字符串列表,像这样:
['Aden', 'abel']
我想对项目进行排序,不区分大小写。 我想要得到:
['abel', 'Aden']
但是我用sorted()或list.sort()得到相反的结果,因为大写字母出现在小写字母之前。
我怎么能无视这个案子呢?我看到的解决方案包括小写所有列表项,但我不想改变列表项的大小写。
我有一个字符串列表,像这样:
['Aden', 'abel']
我想对项目进行排序,不区分大小写。 我想要得到:
['abel', 'Aden']
但是我用sorted()或list.sort()得到相反的结果,因为大写字母出现在小写字母之前。
我怎么能无视这个案子呢?我看到的解决方案包括小写所有列表项,但我不想改变列表项的大小写。
当前回答
>>> x = ['Aden', 'abel']
>>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode
['abel', 'Aden']
在python3中,str是unicode,但在python2中,你可以使用这种更通用的方法,它对str和unicode都有效:
>>> sorted(x, key=lambda s: s.lower())
['abel', 'Aden']
其他回答
在Python 3.3+中,有str.casefold方法是专门为无大小写匹配而设计的:
sorted_list = sorted(unsorted_list, key=str.casefold)
在python2中使用lower():
sorted_list = sorted(unsorted_list, key=lambda s: s.lower())
它适用于普通字符串和unicode字符串,因为它们都有一个较低的方法。
在python2中,它适用于普通字符串和unicode字符串的混合,因为这两种类型的值可以相互比较。不过Python 3并不是这样工作的:你不能比较字节字符串和unicode字符串,所以在Python 3中你应该做理智的事情,只对一种类型的字符串的列表进行排序。
>>> lst = ['Aden', u'abe1']
>>> sorted(lst)
['Aden', u'abe1']
>>> sorted(lst, key=lambda s: s.lower())
[u'abe1', 'Aden']
>>> x = ['Aden', 'abel']
>>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode
['abel', 'Aden']
在python3中,str是unicode,但在python2中,你可以使用这种更通用的方法,它对str和unicode都有效:
>>> sorted(x, key=lambda s: s.lower())
['abel', 'Aden']
我在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]
然后你可以调用这个函数:
sortCaseIns(yourListToSort)
Python3:
排序在其他答案中讨论过,但下面是排序选项的幕后操作。
假设我们想对以下列表进行不区分大小写的排序,我们可以使用'key=':
strs = ['aa', 'BB', 'zz', 'CC']
strs_sorted = sorted(strs,key=str.lower)
print(strs_sorted)
['aa', 'BB', 'CC', 'zz']
这里发生了什么?
键告诉排序使用代理值。'Key='在比较之前转换每个元素。key函数接收1个值并返回1个值,返回的“代理”值用于排序中的比较。
因此,我们正在招聘。Lower '使我们所有的代理值都小写,这消除了大小写差异,并按小写顺序返回列表。
Str.lower vs str.casefold
正如在其他文章中提到的,你也可以使用“casefold()”作为键或任何东西(例如“len”按字符长度排序)。casefold()方法是一个主动的lower()方法,它将字符串转换为大小写折叠字符串以进行无大小写匹配。
sorted(strs,key=str.casefold)
那创建我自己的排序函数呢?
一般来说,最好使用内置函数进行排序,除非非常需要不这样做。内置功能已经过单元测试,很可能是最可靠的。
Python2:
类似的原则,
sorted_list = sorted(strs, key=lambda s: s.lower())
在python3中可以使用
list1.sort(key=lambda x: x.lower()) #Case In-sensitive
list1.sort() #Case Sensitive