这取决于你所说的“特殊”字符是什么意思——但无论你的定义是什么,最简单的方法是定义一个key
函数。
如果你只关心字母:
from string import letters, digits
def alpha_key(text):
"""Return a key based on letters in `text`."""
return [c.lower() for c in text if c in letters]
>>> sorted(list1, key=alpha_key)
['testOne', 'test_one', 'test1_two', 'testTwo']
如果您也关心数字:
def alphanumeric_key(text):
"""Return a key based on letters and digits in `text`."""
return [c.lower() for c in text if c in letters + digits]
>>> sorted(list1, key=alphanumeric_key)
['test1_two', 'testOne', 'test_one', 'testTwo']
如果您关心字母和数字,并且希望数字在字母之后排序(从您的示例输出中看起来可能就是这种情况):
def alphanum_swap_key(text):
"""Return a key based on letters and digits, with digits after letters."""
return [ord(c.lower()) % 75 for c in text if c in letters + digits]
>>> sorted(list1, key=alphanum_swap_key)
['testOne', 'test_one', 'testTwo', 'test1_two']
最后一个利用了“z”在 ASCII 中位于“0”之后 74 位这一事实。