所以我有一些功课,它说我有一个列表,如果开头有一个元音,列表中每个元素的最后一个字母,我必须把这些元音放在一个字符串中。例如:
["Roberto", "Jessie", "A", "Geoffrey", "Eli"]
变成
oeaei
到目前为止,我有这段代码:
vowels = "aeiou"
new_list = []
for words in a_list:
a_list = [words.lower() for words in a_list]
for letters in vowels:
if a_list[0] == vowels or a_list[-1] == vowels:
new_list += a_list[vowels]
return new_list
但是我收到了错误
[]
[]
Traceback (most recent call last):
File "C:\Users\Miraj\Desktop\Q3.py", line 27, in <module>
test_get_first_last_vowels()
File "C:\Users\Miraj\Desktop\Q3.py", line 24, in test_get_first_last_vowels
print(get_first_last_vowels([]))
File "C:\Users\Miraj\Desktop\Q3.py", line 17, in get_first_last_vowels
if a_list[0] == vowels or a_list[-1] == vowels:
IndexError: list index out of range
在我出错的地方,我可以得到一些帮助。谢谢。
好
a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"]
答案 0 :(得分:1)
您正在处理一个空列表。此外,这将永远不会起作用:
>>> new_list += a_list[vowels]
TypeError:list indices必须是整数,而不是str
由于vowels
是一个字符串,而不是一个整数。您想使用append()
。
你也在检查错误的情况:
if a_list[0] == vowels or a_list[-1] == vowels:
应该是:
if a_list[0] == letters or a_list[-1] == letters:
需要对a_list
中的每个单词执行此操作,因此请确保它位于循环内且不是独立的。
答案 1 :(得分:1)
你可以试试这个:
a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"]
def start_end_vowels(a_list):
vowels = "aeiou"
result = ""
for words in a_list:
words = words.lower()
for vowel in vowels:
if len(words) == 1:
if words == vowel:
result += vowel
else:
if words.startswith(vowel):
result += vowel
if words.endswith(vowel):
result += vowel
return result
# Output
>>> a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"]
>>> start_end_vowels(a_list)
'oeaei'
>>> a_list = ["Abba"]
>>> start_end_vowels(a_list)
'aa'
这适用于您的示例,但我会仔细检查其他测试用例以确定。知道如何以不同的方式解决这类问题真是太好了。
更新:编辑它以适用于起始元音和结尾元音相同的情况。
答案 2 :(得分:1)
这有效:
def find_vowels(a_list):
vowels = set('aeiou')
res = []
for word in a_list:
if not word:
continue
word = word.lower()
if word[0] in vowels:
res.append(word[0])
if len(word) > 1 and word[-1] in vowels:
res.append(word[-1])
return ''.join(res)
现在:
>>> a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"]
>>> find_vowels(a_list)
'oeaei'
答案 3 :(得分:1)
根据您要做的事情,您的代码有几个缺陷,比如您不需要写
for words in a_list:
当你写完
a_list = [words.lower() for words in a_list]
所有单词的循环仅由第二行完成。
当你说
时if a_list[0] == vowels or a_list[-1] == vowels:
然后a_list[0]
或a_list[-1]
与整个字符串'aeiou'
匹配,这将永远不会成立。您需要将a_list[0]
或a_list[-1]
与单个元音相匹配。
最后@Idos说,
new_list += a_list[vowels]
这条线不起作用。
所以我写了一个新的代码,考虑到所有这些,并考虑特殊情况,如果这个单词是一个单字。代码如下:
a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"]
vowels = ['a','e','i','o','u']
new_list = []
for word in a_list:
if len(word)>=2:
if word[0].lower() in vowels:
new_list.append(word[0].lower())
if word[-1].lower() in vowels:
new_list.append(word[-1].lower())
elif len(word)==1:
if word.lower() in vowels:
new_list.append(word.lower())
print (''.join(new_list))
答案 4 :(得分:-1)
您可以使用listcomps或genexps编写简洁程序,如下所示。它有 3行,读起来像英语。
vowels = 'aeiou'
# collect
groups = (word if len(word) == 1 else (word[0], word[-1]) for word in words)
# flatten and filter
chars = (char for group in groups for char in group if char.lower() in vowels)
# consume the iterator
''.join(chars) # 'oeAEi'