我目前正在制作一個簡單的代碼,允許用戶輸入一個句子或一組單詞,程式將按字母順序對單詞進行排序。這個初始代碼效果很好,但不幸的是,它先列印出大寫單詞,然后列印出小寫單詞。我希望是否有一種簡單的方法來扭轉這種情況,讓小寫單詞而不是大寫單詞首先出現在串列中。任何幫助將不勝感激!
strings = input("Enter words: ")
words = strings.split()
words.sort()
print("The sorted words are:")
for word in words:
print(word)
uj5u.com熱心網友回復:
您可以傳遞自定義鍵函式進行排序。
words.sort(key=lambda s: (s[0].isupper(), s))
uj5u.com熱心網友回復:
你可以words.sort(key=str.isupper)在你的第一次排序之后做。
uj5u.com熱心網友回復:
默認情況下,Python 根據每個字符的序號值對字串進行排序,該值(ord(c))對應于英文字母表的 ASCII 值。在 ASCII 中,大寫字母的值低于小寫字母,這就是為什么會出現這種結果。
要修改此行為,您需要修改key你的sort功能。例如,如果您想要不區分大小寫的排序,您可以執行以下操作:
words.sort(key=str.lower)
在您的情況下,您需要實施兩個規則:
- 不區分大小寫的排序(例如 'alice' < 'bob' < 'dylan'):可以用
str.lower - 在字符相同但大小寫不同的單詞中,將大寫版本放在最后(例如 'alice' < 'Alice' < 'ALICE'):可以通過恢復原始 ASCII 順序來完成
str.swapcase
您可以使用回傳元組 (rule1, rule2) 的鍵函式同時實作這兩個規則。更多關于這里的資訊。
words.sort(key=lambda x: (x.lower(), x.swapcase()))
這是我的測驗代碼供參考:
words = ["Adam", "ADAM", "Zack", "Chloe", "Bernard", "SIGFRIED", "bErnard"]
words.sort(key=lambda x: (x.lower(), x.swapcase()))
print("The sorted words are:")
for word in words:
print(word)
輸出:
The sorted words are:
Adam
ADAM
bErnard
Bernard
Chloe
SIGFRIED
Zack
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376184.html
