如何在 Python 中使用 .format() 在“for”循环中打印列表?

Posted

技术标签:

【中文标题】如何在 Python 中使用 .format() 在“for”循环中打印列表?【英文标题】:How to print the list in 'for' loop using .format() in Python? 【发布时间】:2019-01-18 14:36:32 【问题描述】:

我是 Python 的新手。我正在编写一段非常简单的代码来使用带有.format() 的“for”循环打印列表的内容,我希望输出如下所示,但出现此错误:

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.鲍勃

有人可以帮我得到那个输出吗?

【问题讨论】:

请格式化您的代码。如果没有适当的缩进,Python 是不可读的。编辑您的评论并使用代码格式化按钮。 我仍然不确定您希望如何格式化输出。你想让它们都在一条线上吗? 嘿@gilch ...因为这是我在堆栈溢出中的第一篇文章...我不知道如何正确编写内容:) ...我用缩进正确编写了代码(采取关心)在 PyCharm IDE 中。我希望输出如下 - 1. David \n2。彼得\n3。迈克尔\n4。约翰\n5。鲍勃 【参考方案1】:

好吧,根据你们的建议,我试过了。我得到了预期的输出

>>> 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

【讨论】:

【参考方案2】:

Python 的 for...in 语句就像其他语言中的 foreach。您希望enumerate 获取索引。

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

如果要将它们全部打印在一行上,请使用end kwarg。

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

【讨论】:

【参考方案3】:
names = ['David', 'Peter', 'Michael', 'John', 'Bob']
for i in range (len (names)):
    print(".".format(i + 1, names[i]))

Python 列表索引引用不能是字符串。使用整数而不是索引本身(它们是字符串)通过 for 循环遍历列表将解决此问题。 这是一个错误消息对诊断问题非常有用的示例。

【讨论】:

非常感谢@Matias Cicero .. 这个简单的回答帮助我理解了这个概念。【参考方案4】:

namesliststr,因此,当您对其进行迭代时,您将获得 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

【讨论】:

index + 1 将输出从 1 而不是 0 开始的名称。小幅编辑,但可以得到更好的输出。

以上是关于如何在 Python 中使用 .format() 在“for”循环中打印列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中初始化嵌套字典

python 使用.format()在Python中打印变量值

python中的format函数怎么使用

涉及 `format()` 点符号时的 Python 格式化

Python3 - 字符串中的变量替换

Python之路--Python中应该使用%还是format来格式化字符串?