【问题标题】:Python: How do you make a list start with the lowercase strings?Python:如何使列表以小写字符串开头?
【发布时间】:2022-01-13 01:40:47
【问题描述】:

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

strings = input("Enter words: ")

words = strings.split()

words.sort()

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

【问题讨论】:

  • 所以你想让zoom 出现在APPLE 之前?

标签: python list uppercase lowercase


【解决方案1】:

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

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

words.sort(key=str.lower)

在你的情况下,你需要实现两条规则:

  1. 不区分大小写的排序(例如 'alice' str.lower 完成
  2. 在具有相同字符但大小写不同的单词中,将大写版本放在最后(例如 'alice' str.swapcase 恢复原始 ASCII 排序来完成

您可以使用返回元组 (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

【讨论】:

  • 我一直忘记swapcase。但是,它的工作方式与您编写的方式不同,我认为只有swapcase 才是他们想要的。
  • 对不起,我忘记了 str 函数上的括号。我编辑了答案,它现在应该可以工作了。
  • 这非常深入!这部分在我们的讲座中没有讨论,所以这是一个很大的帮助。谢谢!
【解决方案2】:

您可以传递自定义键函数进行排序。

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

【讨论】:

  • 这对我有用,谢谢!
  • @Ezikelle 很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多