Создание списка в Python путем разделения индексов другого списка возможно? - PullRequest
2 голосов
/ 28 марта 2020

Я попробовал этот следующий код, но он пока не работает. Он говорит, что я не могу

names = ['John Johnson Doe', 'Jane Janis Doe']
firstnames = []

for name in names:
     firstnames.append(names[name].split(' ')[0])
print(firstnames)

Я получаю здесь ошибку:

TypeError: list indices must be integers or slices, not str

Ответы [ 3 ]

5 голосов
/ 28 марта 2020

Переменная name содержит содержимое списка names, а не индексы. Итак, в первой итерации name = 'John Johnson Doe' и вы пытаетесь использовать его в качестве индекса для names, то есть вы делаете names['John Johnson Doe'].

Просто выполните разбиение на name вместо names[name] и все будет работать правильно.

2 голосов
/ 28 марта 2020

Я получаю здесь ошибку TypeError: индексы списка должны быть целыми или кусочками, а не str

Исключение TypeError , выданное python очистителем интерпретатора говорит, что вы пытались использовать объект str в качестве индекса в вашем списке. Это означает, что переменная name является str в вашей программе. Я думаю, вы предполагали, что это будет int.

Оператор Python for выполняет итерацию членов последовательности по порядку, каждый раз выполняя блок (код под l oop).

Ваша переменная l oop name будет ссылаться на один из объектов в вашем списке names в каждой своей итерации. Он не содержит индекс для объекта в последовательности.

Я предполагаю, что вы хотите, чтобы имя каждой строки присутствовало в вашем списке names. Вот как вы должны это сделать с списками ,

print([n.split(' ')[0] for n in names])

Однако я исправил и ваш код. Попробуйте это:

names = ['John Johnson Doe', 'Jane Janis Doe']
firstnames = []

for name in names:
     firstnames.append(name.split(' ')[0])
print(firstnames)

Выходы:

['John', 'Jane']

Если вы все еще хотите indexes, тогда вы можете взглянуть на перечисление , попробуйте это:

names = ['John Johnson Doe', 'Jane Janis Doe']
firstnames = []

for ndx,name in enumerate(names):
     firstnames.append(names[ndx].split(' ')[0])
print(firstnames)
2 голосов
/ 28 марта 2020

Вы можете создать firstnames напрямую

names = ['John Johnson Doe', 'Jane Janis Doe']

Затем

firstnames = [n.split(' ')[0] for n in names]

firstnames
['John', 'Jane']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...