【问题标题】:Python: Sorting the list alphabetically ignoring vowelsPython:按字母顺序对列表进行排序,忽略元音
【发布时间】:2025-12-07 23:50:02
【问题描述】:

因为我是初学者,请轻轻地陪我。我阅读了按字母顺序排序字符串列表忽略元音的答案。但我不太明白这种方法是如何排序的:

l = ['alpha', 'beta']
vowels = ['aeiouAEIOU']
sorted(l, key=lambda s: ''.join(c for c in s if c not in vowels))

我的问题:

  1. 排序如何在字符级别而不是单词级别循环而不拆分单词?
  2. 如果 c 不是元音,然后将字母连接回单词,那么他们如何对有元音的单词进行排序?其他带有元音的单词会发生什么变化?

【问题讨论】:

  • 没有“词级排序”这回事。单词总是按字符排序(有什么替代方法?)。你的第二个问题不清楚。
  • 只需将元音改为vowels = 'aeiouAEIOU'。现在您正在询问其中一个字母是否等于子列表。
  • 好的!我现在明白了。 lambda 所做的是消除单词中出现的元音,然后将剩余的字符串传回进行排序。

标签: python list sorting


【解决方案1】:

如果我理解正确,您希望对列表中的字符串进行排序,就好像它们没有元音一样。所以,hello 应该排序为hllworld 应该排序为wrld。您可以尝试在排序 lambda 中删除元音:

l = ['help', 'hello', 'world', 'weld']
l = sorted(l, key=lambda s: re.sub(r'[AEIOUaeiou]', '', s))
print(l)  # ['hello', 'help', 'weld', 'world']

【讨论】:

  • re.sub(r'[AEIOUaeiou]' 是什么意思?
  • 表示将元音(大小写)替换为空白''。