gpt4 book ai didi

python : list comprehension + filter

转载 作者:行者123 更新时间:2023-11-28 19:43:20 26 4
gpt4 key购买 nike

我有一个字符串,我希望从中提取元音和辅音及其索引。

我在想:

a = "HELLO"
list_ = list(a)
vow = [(x, i) for i,x in enumerate(list_) if x in ['A', 'E', 'I', 'O', 'U']]
cons = [(x, i) for i, x in enumerate(list_) if x not in j for j in list_ if j in ['A', 'E', 'I', 'O', 'U']]

但是,我收到了 NameError(表示 j 未定义)。为什么我不能嵌套我的列表理解。

我想要的输出:

vows : [('E', 1), ('O', 4)]
cons : [('H', 0), ('L', 2), ('L', 3)]

最佳答案

第二个列表理解的问题是,理想情况下 if 条件应该放在最后(在第二个 for 循环之后,只有 j我们可以访问)。但你真的不需要那个,只需检查 x 是否不在元音列表中。示例 -

cons = [(x, i) for i,x in enumerate(list_) if x not in ['A', 'E', 'I', 'O', 'U']]

演示 -

>>> a = "HELLO"
>>> list_ = list(a)
>>> vow = [(x, i) for i,x in enumerate(list_) if x in ['A', 'E', 'I', 'O', 'U']]
>>> cons = [(x, i) for i,x in enumerate(list_) if x not in ['A', 'E', 'I', 'O', 'U']]
>>> vow
[('E', 1), ('O', 4)]
>>> cons
[('H', 0), ('L', 2), ('L', 3)]

您可以通过对 vowels 使用 set 来加快速度,您实际上并不需要 list_ ,您可以枚举 a 本身,并得到完全相同的结果。示例 -

vowel_set = {'A', 'E', 'I', 'O', 'U'}
vow = [(x, i) for i,x in enumerate(a) if x in vowel_set]
cons = [(x, i) for i,x in enumerate(a) if x not in vowel_set]

演示 -

>>> a = "HELLO"
>>> vowel_set = {'A', 'E', 'I', 'O', 'U'}
>>> vow = [(x, i) for i,x in enumerate(a) if x in vowel_set]
>>> cons = [(x, i) for i,x in enumerate(a) if x not in vowel_set]
>>> vow
[('E', 1), ('O', 4)]
>>> cons
[('H', 0), ('L', 2), ('L', 3)]

关于 python : list comprehension + filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32901638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com