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

时间:2014-03-27 17:38:30

标签: python string list string-formatting

我非常喜欢用.format()

打印内容的全新Python约定

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

工作示例将不胜感激。

8 个答案:

答案 0 :(得分:13)

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

my_list = [1, 2, 3, 4]
print(*my_list, sep="\n")

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

<强>输出

1
2
3
4

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

from __future__ import print_function

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

答案 1 :(得分:7)

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

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

'\n'.join('{}' for _ in range(len(myList))).format(*myList)

因此,您首先要创建一个格式字符串,方法是让生成器在{}中为每个元素生成一个格式项myList,并使用换行符加入这些格式项。因此,结果字符串看起来像这样:{}\n{}\n…\n{}\n{}

然后使用该字符串作为格式字符串,并在其上调用format,将解压缩列表作为参数传递给它。因此,您正确填写格式字符串的所有位置。

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

'\n'.join('{}'.format(item) for item in myList)

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

for item in myList:
    print(item)

    # or use string formatting for the item here
    print('{}'.format(item))

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

答案 2 :(得分:1)

你的意思是print('\n'.join(a_list))?字符串格式化可能与'\n'.join(a_list)类似,但这里似乎没有必要。 (见更新)

问题是,.format根本不打印任何东西。这就是print的用途。 format获取一些数据并返回一个字符串。 print是将该字符串输出到终端/标准输出的一种方法,但print.format实际上没有真正的关系。

更新

我收回了我所说的字符串格式化能够做到这一点。格式模式本身预先定义了format方法的arity,因此,如果没有动态构建格式模式,则不能使用format

答案 3 :(得分:1)

保持简单

>>> myList = [2,3,5,6,5,4,3,2]

>>> for elem in myList:
    '{}'.format(elem)

给出

'2'
'3'
'5'
'6'
'5'
'4'
'3'
'2'

这是你想要的吗?

答案 4 :(得分:0)

另一种方法是使用字符串乘法:

list = [1, 2, 3, 4, 5]
print( ( '{}\n' * len(list) ).format( *list ) )

对于普通的老式打印,我将使用print命令的sep选项。如果您使用的是python日志记录工具(不带sep参数),则format方法会更有用。

答案 5 :(得分:0)

我们可以使用fields[`ECStruct1`] 逐行打印:

join

答案 6 :(得分:0)

获得不需要打印的字符串的另一种方法:

my_list = [1, 2, 3, 4]
str("{}\n"*len(my_list)).format(*my_list)

答案 7 :(得分:0)

使用模块 pprint -Data pretty printer

>>> import pprint

>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']

>>> stuff.insert(0, stuff[:])

>>> pp = pprint.PrettyPrinter(indent=4)

>>> pp.pprint(stuff)

[   ['spam', 'eggs', 'lumberjack', 'knights', 'ni'],
    'spam',
    'eggs',
    'lumberjack',
    'knights',
    'ni']