возвращает 2-ю букву в строке в списке и сортирует слова по ней. продолжайте получать диапазон индексации вне пределов. Python - PullRequest
0 голосов
/ 07 февраля 2020

Я работаю над заданием со следующими требованиями:

Вы будете сортировать следующий список по второй букве каждого элемента, от a до z. Создайте функцию для использования при сортировке, которая называется second_let. Он будет принимать строку как входную и возвращать вторую букву этой строки. Затем отсортируйте список, создайте переменную с именем sorted_by_second_let и назначьте ей отсортированный список.

Это мой код:

ex_lst = ['hi', 'how are you', 'bye', 'apple', 'zebra', 'dance']

def second_let(x):

    lst= []
    for wrd in x:
        lst.append(wrd[1])
    return lst

print(second_let(ex_lst))
print(sorted(second_let(ex_lst)))

sorted_by_second_let= sorted(ex_lst, key= second_let)

Я получаю эту ошибку:

IndexError: строковый индекс выходит за пределы диапазона в строке 7, что является последним .append (WRD [1]). Что я делаю неправильно? как я могу сделать это лучше?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Когда вы пишете:

sorted_by_second_let= sorted(ex_lst, key=second_let)

Это передаст каждое слово в second_let. Тогда в функции каждый wrd будет одним символом, что явно не то, что вам нужно.

Если вы хотите просто отсортировать по второй букве, функции key просто нужно вернуть эту вторую письмо. Например:

ex_lst = ['hi', 'how are you', 'bye', 'apple', 'zebra', 'dance']

sorted(ex_lst, key=lambda x: x[1])
# ['dance', 'zebra', 'hi', 'how are you', 'apple', 'bye']

Там x - это слово, а x[1] - это вторая буква. sorted() позаботится обо всем остальном.

0 голосов
/ 31 марта 2020
ex_lst = ['hi', 'how are you', 'bye', 'apple', 'zebra', 'dance']

def second_let(x):
    return x[1]

sorted_by_second_let= sorted(ex_lst, key= second_let)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...