逐行打印列表元素 - 是否可以使用格式

and*_*abs 9 python string list string-formatting

我非常喜欢用Python打印的新常规 .format()

是否可以使用它逐行打印元素.当然假设元素数量未知.

工作实例将不胜感激.

the*_*eye 17

如果您使用的是Python 3.x,并且打算只打印元素列表,每行一个,那么您可以使用print函数本身,就像这样

my_list = [1, 2, 3, 4]
print(*my_list, sep="\n")
Run Code Online (Sandbox Code Playgroud)

*my_list只需解压缩列表元素并将其中的每一个作为参数传递给print函数(是的,print是Python 3.x中的函数).

产量

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Python 2.x,那么您可以像以前一样从未来导入打印功能

from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)

注意:此导入应该是文件中的第一行.

  • +1这绝对是要走的路。很少有人知道`print()`中的`sep`参数。 (2认同)
  • 如果您使用的是Python 2.7,只需执行`from __future__ import print_function`. (2认同)

pok*_*oke 7

您可以在任何类型的字符串上使用字符串格式化程序,包括多行字符串.所以当然,如果你有一个格式字符串,'{}\n{}\n{}'你可以传递三个项目,它们将全部放在不同的行上.

因此,对于要打印的动态数量的元素,您需要做的就是确保格式字符串也包含相同数量的格式项.解决此问题的一种方法是动态构造格式字符串.例如:

'\n'.join('{}' for _ in range(len(myList))).format(*myList)
Run Code Online (Sandbox Code Playgroud)

因此,您首先要创建一个格式字符串,方法是让生成器{}为每个元素生成一个格式项myList,并使用换行符连接它们.所以结果字符串看起来像这样:{}\n{}\n…\n{}\n{}.

然后使用该字符串作为格式字符串,并调用format它,将解压缩列表作为参数传递给它.所以你正确地填充了格式字符串的所有位置.

所以,你可以做到.但是,这不是一个实际的想法.它看起来相当混乱,并没有很好地传达你的意图.更好的方法是分别处理列表中的每个项目,并单独格式化,然后将它们连接在一起:

'\n'.join('{}'.format(item) for item in myList)
Run Code Online (Sandbox Code Playgroud)

至于只是逐行打印元素,当然更明显的方法是,不需要你用换行符构建一个长字符串,就是循环遍历项目并逐个打印它们:

for item in myList:
    print(item)

    # or use string formatting for the item here
    print('{}'.format(item))
Run Code Online (Sandbox Code Playgroud)

当然,正如所提出的那样,如果每个循环迭代都非常简单,您还可以将整个列表传递给print函数,并设置sep='\n'为在每个单独的行上打印元素.