【问题标题】:Sorting list of strings in lexicographic order [duplicate]按字典顺序排序字符串列表[重复]
【发布时间】:2026-02-14 09:00:01
【问题描述】:

我想按字典顺序打印单词。我以为sorted()是这样排列单词的。我也尝试过.sort(),它返回相同的订单。还是我错过了真正的字典顺序?

代码:

a_list = ['Zrhregegrydb', 'cygzRFWDWBdvF']
for word in sorted(a_list):
    print(word)

输出:

# Zrhregegrydb
# cygzRFWDWBdvF

期望的输出:

# cygzRFWDWBdvF
# Zrhregegrydb

【问题讨论】:

  • 您想将小写字母排在大写字母之前,还是完全忽略大小写?
  • 字典顺序和不区分大小写看似独立,但实际上是相互矛盾的概念。字母大小写是特定于语言环境/文化的。一旦你去那里,你就失去了字典顺序的概念。您真的想要基于用户区域设置的排序顺序吗?

标签: python list sorting lexicographic


【解决方案1】:

这是因为大写字母的 ASCII 值小于小写字母。如果你想让你的排序忽略大小写,你可以这样做,例如:

for word in sorted(a_list, key=str.lower):

【讨论】:

  • 这里的问题是小写和大写字母的顺序是任意的。输出示例:['a', 'A', 'b', 'B']['a', 'A', 'B', 'b'](取决于输入顺序)。
【解决方案2】:

默认情况下,python 已经按字典顺序对字符串进行排序,但大写字母都排在小写字母之前。如果你想对字符串进行排序并忽略大小写,那么你可以这样做

b_list = sorted(a_list, key=str.lower)

【讨论】:

  • 直接指定str.lower作为键比调用一个调用str.lower的lambda要快。更好的是,使用str.casefold
  • @PM2Ring 好点。打字也少了。
【解决方案3】:

你错过了一些东西。在标准的 Unicode 顺序(从旧的 ASCII 顺序开始)中,所有大写英文字母都排在所有小写字母之前。你可以在a table of Unicode characters看到。

如果您想在排序时忽略大小写,就像您所做的那样,只需在排序期间将所有字母临时转换为大写或小写即可。 Python 允许您在 sorted 函数中使用 key 参数执行此操作,您可以在此处的其他答案中看到(在我完成此答案之前完成)。

【讨论】:

    【解决方案4】:

    排序时可以忽略大小写:

    sorted_list = sorted(a_list, key = lambda s : s.lower())
    

    【讨论】:

      【解决方案5】:

      您必须使用索引进行迭代才能看到正确的顺序。

      这里是你如何做的代码。

      a_list = ['Zrhregegrydb', 'cygzRFWDWBdvF']
      a_list.sort(reverse=True)
      for i in range(0, len(a_list)):
          print a_list[i]
      

      【讨论】:

      • 并且来自 OP 的循环优于循环 range()
      • 我做到了,而且效果很好我测试了代码然后给出了答案,你能再检查一次吗
      • repl.it/@codeguru/TriangularNutritiousLicenses 我首先得到输出为xyz,然后是abc,它按字母倒序排列。这不是 OP 想要的结果。
      • 如果你想要 abc 首先删除 reverse=True 它将完成我根据他的要求提供代码的工作
      • 是的,您的代码适用于给定的示例。但是,您提出的解决方案不适用于其他可能的输入。删除 reverse=True 只会给出问题中的原始代码,这也不是有效的解决方案。
      最近更新 更多