Как распечатать список в цикле for с помощью .format() в Python?

Я новичок в Python. Я пишу очень простой фрагмент кода для печати содержимого списка, используя цикл for с .format(), и мне нужен вывод, как показано ниже, но я получаю эту ошибку:

names = ['David', 'Peter', 'Michael', 'John', 'Bob']
for i in names:
    print("{}.{}".format(i, names[i])) 

print("{}.{}".format(i,breakfastMenu[i]))
TypeError: list indices must be integers or slices, not str

Ожидаемый результат Я хочу: 1. Дэвид 2. Питер 3. Майкл 4. Джон 5. Боб

Может кто-нибудь, пожалуйста, помогите мне получить этот вывод?


person devPython    schedule 11.08.2018    source источник
comment
Пожалуйста, отформатируйте код. Python не читается без надлежащего отступа. Отредактируйте свой комментарий и используйте кнопку форматирования кода.   -  person gilch    schedule 11.08.2018
comment
Я все еще не уверен в том, как вы хотите отформатировать вывод. Вы хотели их всех в одной строке?   -  person gilch    schedule 11.08.2018
comment
привет @gilch ... Поскольку это мой первый пост в Stack Overflow ... я не знал, как правильно писать контент :) ... Я правильно написал код с отступом (с осторожностью) в PyCharm IDE. И мне нужен вывод, как показано ниже: 1. Дэвид \n2. Питер \n3. Михаил \n4. Джон\n5. Боб   -  person devPython    schedule 11.08.2018


Ответы (4)


names = ['David', 'Peter', 'Michael', 'John', 'Bob']
for i in range (len (names)):
    print("{}.{}".format(i + 1, names[i]))

Ссылки индекса списка Python не могут быть строками. Итерация по списку с помощью цикла for с использованием целых чисел, а не самих индексов (которые являются строками) решит эту проблему. Это пример, когда сообщение об ошибке очень полезно для диагностики проблемы.

person Reece M    schedule 11.08.2018
comment
Большое спасибо @Matias Cicero .. Этот простой ответ с вашей стороны помог мне понять концепцию. - person devPython; 11.08.2018

names — это list из str, поэтому при повторении вы получите str значений.

for i in names:
   print(i + 'other_str') # i is a str

Чтобы получить произвольный доступ к элементам в list, вам нужно указать их index, который должен быть int.

Если вы хотите получить соответствующие индексы элементов во время итерации по ним, вы можете использовать Python enumerate:

for index, name, in enumerate(names):
    print('{}.{}'.format(index, names[index]))

Обратите внимание, что вам не нужно обращаться к имени по names[index], потому что вы уже получаете элемент при повторении. Итак, вышеприведенное аналогично следующему:

for index, name in enumerate(names):
    print('{}.{}'.format(index, name))

Что выводит:

0.David
1.Peter
2.Michael
3.John
4.Bob
person Matias Cicero    schedule 11.08.2018
comment
index + 1 будет выводить имена, начинающиеся с 1, а не с 0. Небольшое редактирование, но обеспечивает лучший результат. - person Reece M; 11.08.2018

Оператор for...in в Python похож на оператор foreach в других языках. Вы хотите, чтобы enumerate получил индексы.

for i, name in enumerate(names):
    print("{}. {}".format(i+1, name))

Если вы хотите напечатать их все в одной строке, используйте kwarg end.

for i, name in enumerate(names):
    print("{}. {}".format(i+1, name), end=" ")
print()  # for the final newline

1. David 2. Peter 3. Michael 4. John 5. Bob
person gilch    schedule 11.08.2018

Что ж, согласно предложенному ответу от вас, ребята, я попытался. Я получил ожидаемый результат

>>> names = ['David', 'Peter', 'Michael', 'John', 'Bob']
>>> for i in range(len(names)):
    print('{}.{}'.format(i+1, names[i]))

Вывод, который я мог видеть:

1.David
2.Peter
3.Michael
4.John
5.Bob
person devPython    schedule 11.08.2018