按字典顺序排序字符串列表

3
我希望按照字典序打印单词。我认为 sorted() 可以实现这个功能。我也尝试过使用 .sort(),但是它返回的顺序相同。或者我对字典序理解有误吗?
代码:
a_list = ['Zrhregegrydb', 'cygzRFWDWBdvF']
for word in sorted(a_list):
    print(word)

输出:

# Zrhregegrydb
# cygzRFWDWBdvF

期望输出:

# cygzRFWDWBdvF
# Zrhregegrydb

1
你想在排序时先排小写字母还是大写字母,还是完全忽略大小写? - Aran-Fey
词典顺序和大小写不敏感似乎是独立的概念,但实际上它们是相互冲突的。字母大小写是与语言环境/文化相关的。一旦你涉及到这个问题,你就失去了词典顺序的概念。你真的想要基于用户语言环境的排序吗? - Tom Blodget
5个回答

5

默认情况下,Python已经按字典顺序对字符串进行了排序,但大写字母排在小写字母前面。如果你想对字符串进行排序并忽略大小写,那么可以执行以下操作:

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

直接指定 str.lower 作为键比调用一个调用 str.lower 的 lambda 更快。更好的方法是使用 str.casefold - PM 2Ring
@PM2Ring 很好的观点。这样打字也更少了。 - Code-Apprentice

4

这是因为大写字母的ASCII值比小写字母小。如果您希望排序时忽略大小写,可以采用以下方法:

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

这里的问题是大小写字母将以任意顺序出现。示例输出:['a','A','b','B']或['a','A','B','b'](取决于输入顺序)。 - C. Yduqoli

3
你漏掉了一些东西。按照标准的Unicode顺序(从旧的ASCII顺序开始),所有大写的英文字母都排在所有小写字母前面。你可以在Unicode字符表中看到这一点。
如果你想在排序时忽略大小写,似乎你确实想这样做,只需在排序期间将所有字母临时转换为大写或小写。Python允许你在sorted函数中使用key参数来实现这一点,正如你可以在其他答案中看到的一样(在我完成这个答案之前就已经完成了)。

2

您可以在排序时忽略大小写:

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

-3

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

下面是代码示例,演示如何实现。

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

而且,从OP开始的循环优于在“range()”上进行循环。 - Code-Apprentice
我已经尝试过并且它完美工作。我测试了代码并给出了答案,请你再次检查。 - Usama Jamil
1
我得到的输出是 xyz,然后是 abc,这是按照字母表的反向顺序。这不是原帖作者想要的结果。 - Code-Apprentice
如果你想要abc,只需删除reverse=True,它就能完成任务。我根据他的要求提供了代码。 - Usama Jamil
是的,你的代码针对所给的示例可以运行。然而,你的提议解决方案并不能处理其他可能的输入。删除 reverse=True 只会得到问题中的原始代码,这也不是一个有效的解决方案。 - Code-Apprentice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接