使用Python 3:
a = ['(', 'z', 'a', '1', '{']
a.sort()
a
['(', '1', 'a', 'z', '{']
如何对列表进行排序,以使字母数字字符位于标点符号之前:
a = ['(', 'z', 'a', '1', '{']
a.custom_sort()
a
['1', 'a', 'z', '(', '{']
(实际上,我并不关心最后两个字符的顺序。)
这似乎出奇的困难!
我了解Python会按字母顺序排序,并且我正在寻找一种人类可读的排序方式。我发现natsort,但它似乎只处理数字。
答案 0 :(得分:5)
您可以为sort
使用键函数,该键函数返回一个元组以测试给定字符是否为字母数字,并使用该字符的字典顺序作为辅助排序键:
a.sort(key=lambda c: (not c.isalnum(), c))
答案 1 :(得分:1)
您可以通过key
函数对值进行排序以检查其值是否在string.punctuation
中:
import string
punctuation = set(string.punctuation)
a = sorted(a, key=lambda x: (x in punctuation, x))
print(a)
#['1', 'a', 'z', '(', '{']
答案 2 :(得分:0)
这种方法会明确检查其是否在正确的位置:
import string
import sys
a = ['(', 'z', 'a', '1', '{']
def key(a):
if a in string.ascii_letters or a in string.digits:
return ord(a)
return sys.maxsize
a.sort(key=key)
print(a)