提问者:小点点

列表理解不产生任何值[重复]


我试图在两个列表中存储一个字符串的元音和常量索引,到目前为止我有以下几个:

def my_function(string):
    vowels_index = [] # vowels indices list
    const_index = [i if string[i] not in "AEIOU" else vowels_index.append(i) for i in range(len(string))] # constants indices list

CONST_INDEX中存在一些None值:

>>> string = "BANANA"
>>> const_index = [i if string[i] not in "AEIOU" else vowels_index.append(i) for i in range(len(string))]
>>> const_index
[0, None, 2, None, 4, None]
>>>

有没有更好的办法找到这两个名单呢?


共1个答案

匿名用户

您可以首先在列表理解中使用enumerate过滤出元音出现的索引。 然后,您可以使用集合与所有索引的差异来查找补语,补语是辅音必须出现的地方。

def my_function(string):
    vowels = [idx for idx, val in enumerate(string) if val.lower() in 'aeiou']
    consts = list(set(range(len(string))) - set(vowels))
    return vowels, consts

>>> my_function('BANANA')
([1, 3, 5], [0, 2, 4])

可以解包以获取单独的列表

>>> vowels, consts = my_function('BANANA')
>>> vowels
[1, 3, 5]
>>> consts
[0, 2, 4]