Python-迭代和更改列表的元素

Python-迭代和更改列表的元素,python,list,loops,Python,List,Loops,我刚刚开始学习python,在迭代和if语句方面遇到了麻烦 我有一个列表d: d = ['s','u','p','e','r','c','a','l','i','f','r','a','g','i','l','i','s','t','i','c','e','x','p','i','a','l','i','d','o','c','i','o','u','s'] 我需要遍历列表,检查每个元素是否等于一个元音(a,e,I,o,u)。如果是元音,则必须将该元素替换为字母前面有单词“元音”的子列表。例如

我刚刚开始学习python,在迭代和if语句方面遇到了麻烦

我有一个列表
d

d = ['s','u','p','e','r','c','a','l','i','f','r','a','g','i','l','i','s','t','i','c','e','x','p','i','a','l','i','d','o','c','i','o','u','s']
我需要遍历列表,检查每个元素是否等于一个元音(
a
e
I
o
u
)。如果是元音,则必须将该元素替换为字母前面有单词
“元音”
的子列表。例如,如果检测到
'a'
,它将被替换为
[“元音”,“a']

虽然我知道这是不正确的,但这是我迄今为止一直在想的:

for items in d:
    if items == 'a':
        d[items:items] = ['vowel', 'a']

要检查成员身份,可以在操作数中使用
;要替换成员身份,可以使用
枚举
循环列表:

>>> for i,item in enumerate(d) :
...   if item in ('a', 'e', 'i', 'o', 'u') :
...              d[i]=['vowel',item]
... 
>>> d
['s', ['vowel', 'u'], 'p', ['vowel', 'e'], 'r', 'c', ['vowel', 'a'], 'l', ['vowel', 'i'], 'f', 'r', ['vowel', 'a'], 'g', ['vowel', 'i'], 'l', ['vowel', 'i'], 's', 't', ['vowel', 'i'], 'c', ['vowel', 'e'], 'x', 'p', ['vowel', 'i'], ['vowel', 'a'], 'l', ['vowel', 'i'], 'd', ['vowel', 'o'], 'c', ['vowel', 'i'], ['vowel', 'o'], ['vowel', 'u'], 's']
>>> 

您离得很近,这是所需的最小编辑

for items in d:
    if items in {'a', 'e', 'i', 'o', 'u'}:
        d[d.index(items)] = ['vowel', items]   # Get the index of the element, then replace 
print(d)

您可以使用列表:

[['vowel', i] if i in 'aeiou' else i for i in d]
试一试:

for key, l in enumerate(d):
    if l in ('a', 'e', 'i', 'o', 'u'):
        d[key] = ['vowel', l]

在长度范围内迭代要便宜得多。您可以避免元素查找,这将花费额外的
0(n)


说清楚一点,我很确定
[“元音”,“a']
只代表字母“a”。它应该使用出现的任何元音。使用
{'a','e','i','o','u'}
;)嗯,
0(1)
总是比
0(n)
好,除非我在数钱;)你有关于这个的博客链接吗,比如集合、元组和列表?太多人感到困惑。。。需要链接吗badly@PadraicCunningham谢谢(但是可怕的元组不见了……唉)元组比我想象中的列表更便宜,但当你在一个列表中查找时仍然是线性的!这将创建一个新列表。
for index in xrange(len(d)):
    if d[index] in 'aeiou':
        d[index] = ['vowel', d[index]]