按字母顺序忽略字符串列表忽略元音python

时间:2017-08-07 04:58:49

标签: python string list sorting

如果我有一个字符串列表,我将如何通过忽略元音按字母顺序对其进行排序。例如,['alpha','beta']将排序为['beta','alpha'],因为'bt'在'lph'之前按字母顺序排列。我已经尝试了一些使用lambda函数和东西,但我有点卡住,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以在sort函数的key参数中使用lambda函数。

In [14]: l = ['alpha', 'beta']
In [15]: v = {'a', 'e', 'i', 'o', 'u'}
In [16]: sorted(l, key=lambda item: [char for char in item if char.lower() not in v])
Out[16]: ['beta', 'alpha']

答案 1 :(得分:1)

在Python 2.x中,您可以在lambda中使用string.translate()从字符串中删除元音:

>>> my_list = ['alpha', 'beta', 'gamma', 'theta']
>>> vowels = 'aeiouAEIOU' # string of 'vowel'

>>> sorted(my_list, key=lambda s: s.translate(None, vowels))
['beta', 'gamma', 'alpha', 'theta']

但是在Python 3.x中,您需要先将字符串转换为字节才能访问translate函数。例如:

sorted(my_list, key=lambda s: s.encode.translate(None, b'aeiouAEIOU')
# Note: This will work on Python 2.x as well, but encoding is not required there

作为替代方案,您还可以在sorted中使用以下 lambda表达式,它可以在Python 2.x和3.x上正常工作:

sorted(my_list, key=lambda s: ''.join(c for c in s if c not in vowels))

答案 2 :(得分:1)

在这里使用命名函数是个好主意。有两个好处 - 您可以使用描述性名称,并且您有一个可以进行单元测试的功能。

def remove_vowels_from_string(s):
    return s.translate(None, 'aeiouAEIOU')

new_list = sorted(my_list, key=remove_vowels_from_string)

对于Python3,您可以使用此版本

def remove_vowels_from_string(s):
    return translate(dict.fromkeys(map(ord, 'aeiouAEIOU')))

new_list = sorted(my_list, key=remove_vowels_from_string)