Python 按字母顺序忽略元音的字符串排序列表

Python 按字母顺序忽略元音的字符串排序列表,python,string,list,sorting,Python,String,List,Sorting,如果我有一个字符串列表,我将如何通过忽略元音按字母顺序排序。例如,['alpha','beta']将排序为['beta','alpha'],因为'bt'按字母顺序排在'lph'之前。我曾经尝试过使用lambda函数之类的东西,但我有点卡住了,希望您能提供帮助。您可以在排序函数的关键参数中使用lambda函数 In [14]: l = ['alpha', 'beta'] In [15]: v = {'a', 'e', 'i', 'o', 'u'} In [16]: sorted(l, key=la

如果我有一个字符串列表,我将如何通过忽略元音按字母顺序排序。例如,['alpha','beta']将排序为['beta','alpha'],因为'bt'按字母顺序排在'lph'之前。我曾经尝试过使用lambda函数之类的东西,但我有点卡住了,希望您能提供帮助。

您可以在排序函数的关键参数中使用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']

可以在排序函数的关键参数中使用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']

在Python 2.x中,您可以在lambda中使用以下命令从字符串中删除元音:

>>> 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']
但是在Python3.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
作为替代方案,您还可以在
排序的
中使用以下lambda表达式,这在Python 2.x和3.x上都可以正常工作:

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

在Python 2.x中,您可以在lambda中使用以下命令从字符串中删除元音:

>>> 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']
但是在Python3.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
作为替代方案,您还可以在
排序的
中使用以下lambda表达式,这在Python 2.x和3.x上都可以正常工作:

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

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

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)

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

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)

很好,我也要把它砍掉。我会用一组元音,因为它们不会改变much@ChristianSauer是的,布景更有效。很好,我也准备好了。我会用一组元音,因为它们不会改变much@ChristianSauer是的,set更有效。有人在做NCSS python挑战haha@that2guy确实有人在做NCSS python挑战haha@that2guy确切地