列表理解产生None值[重复]。

问题描述 投票:0回答:1

我试图将一个字符串的元音和常量索引存储在两个列表中,目前我有以下情况。

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]
>>>

有没有更好的方法来找到这两个列表?

python string list list-comprehension
1个回答
2
投票

你可以先使用 enumerate 在列表理解中过滤出元音出现的索引。然后您可以使用 set 与所有指数的差异,以找到补码,即辅音必须出现的地方。

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]
© www.soinside.com 2019 - 2024. All rights reserved.