如何从列表中的元素中获取字母

时间:2016-05-15 08:55:53

标签: list function python-3.x

所以我有一些功课,它说我有一个列表,如果开头有一个元音,列表中每个元素的最后一个字母,我必须把这些元音放在一个字符串中。例如:

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

5 个答案:

答案 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'