如何只大寫拉丁字符,而讓其他字符保持原樣?
我想對物件進行排序,這是我的代碼,它不區分大小寫:
objects = ['факультет', 'Worm', 'Фонарь', 'word', 'Фонтан']
objects.sort(key=lambda x: x.upper(), reverse=False)
print(objects)
但我必須對拉丁文不區分大小寫和非拉丁文區分大小寫進行排序:
這就是我得到的:
['word', 'Worm', 'факультет', 'Фонарь', 'Фонтан']
拉丁語和非拉丁語排序不區分大小寫
這就是我要匹配的內容:
['word', 'Worm', 'Фонарь', 'Фонтан', 'факультет']
拉丁排序不區分大小寫,非拉丁排序區分大小寫
我知道這正是 Python 2 的行為,但我使用的是 Python 3。
uj5u.com熱心網友回復:
在您的鍵函式中處理不同的字串。如果第一個字符(我認為這足以檢查)是 ASCII 字母,則應用upper(),否則按原樣使用字串。
import string
objects = ['факультет', 'Worm', 'Фонарь', 'word', 'Фонтан']
objects.sort(key=lambda x: x.upper() if x[0] in string.ascii_letters else x, reverse=False)
print(objects)
這會給你['word', 'Worm', 'Фонарь', 'Фонтан', 'факультет']
如果要檢查所有字符是否都是 ASCII 字母,請使用all.
objects.sort(key=lambda x: x.upper() if all(c in string.ascii_letters for c in x) else x, reverse=False)
uj5u.com熱心網友回復:
單程:
from string import ascii_lowercase as abc, ascii_uppercase as ABC
table = str.maketrans(abc, ABC)
blocks.sort(key=lambda s: s.translate(table))
其他:
import re
blocks.sort(key=lambda s: re.sub('[a-z] ', lambda m: m[0].upper(), s))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/427438.html
標籤:Python python-3.x
下一篇:查找素數并將它們添加到串列中
