Python: 如何让列表以小写字符串开头?

Python: How do you make a list start with the lowercase strings?

我目前正在制作一个简单的代码,允许用户输入一个句子或一组单词,程序将按字母顺序对单词进行排序。这段初始代码效果很好,但不幸的是,它先打印出大写单词,然后打印出小写单词。我希望是否有一种简单的方法可以扭转这种情况,让小写单词排在列表的第一位而不是大写单词。任何帮助将不胜感激!

strings = input("Enter words: ")

words = strings.split()

words.sort()

print("The sorted words are:")
for word in words:
    print(word)

您可以通过自定义键函数进行排序。

words.sort(key=lambda s: (s[0].isupper(), s))

默认情况下,Python 根据每个字符的序数值 (ord(c)) 对字符串进行排序,这对应于其英文字母表的 ASCII 值。在 ASCII 中,大写字母的值低于小写字母,这就是为什么你有这种结果。

要修改此行为,您需要修改 sort 函数中的 key。 例如,如果您想要不区分大小写的排序,您可以执行以下操作:

words.sort(key=str.lower)

在您的情况下,您需要实施两条规则:

  1. 不区分大小写的排序(例如'alice' < 'bob' < 'dylan'):可以用str.lower
  2. 完成
  3. 在字符相同但大小写不同的单词中,将大写版本放在最后(例如 'alice' < 'Alice' < 'ALICE'):可以通过恢复原始 ASCII 排序来完成str.swapcase

你可以用一个键函数同时实现这两个规则,returns一个元组(rule1, rule2)。关于 here.

的更多信息
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