逐行打印列表元素 - 使用格式可能吗

20 投票
8 回答
59445 浏览
提问于 2025-04-18 00:11

我非常喜欢Python中一种新的写法,用.format()来打印东西。

请问能不能用它来一行一行地打印元素呢?当然,假设元素的数量是未知的。

如果能给个工作示例就太好了。

8 个回答

2

我们可以用 join 来逐行打印内容:

>>> x = ['a','b','c']
>>> print("\n".join(x))
a
b
c
2

保持简单

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

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

给出

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

这是你想要得到的吗?

3

你是说像 print('\n'.join(a_list)) 这样吗?字符串格式化可能也能做到类似 '\n'.join(a_list) 的效果,但在这里似乎没必要使用它。(见更新)

关键是,.format 根本不负责打印东西。打印的工作是 print 来做的。format 是用来处理一些数据并返回一个字符串的。print 是将这个字符串输出到终端或标准输出的一种方式,但 print.format 之间其实没有什么直接关系。

更新:

我收回之前说的字符串格式化可以做到这点的说法。格式模式本身预定义了 arity(参数个数)这个概念,所以除非动态构建格式模式,否则你不能用 format 来实现这个功能。

46

如果你在使用 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,那么你可以像这样从未来导入 print 函数:

from __future__ import print_function

注意: 这个导入语句应该放在文件的第一行。

11

你可以在任何类型的字符串上使用字符串格式化,包括多行字符串。所以,如果你有一个格式字符串 '{}\n{}\n{}',你可以传入三个项目,它们就会被放在不同的行上。

如果你想打印的元素数量是动态的,你只需要确保格式字符串里有相同数量的格式项。解决这个问题的一种方法是动态构建格式字符串。例如:

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

基本上,你首先创建一个格式字符串,让一个生成器为 my_list 中的每个元素生成一个格式项 {},然后用换行符把这些格式项连接起来。这样得到的字符串看起来像这样: {}\n{}\n…\n{}\n{}

然后你就可以把这个字符串当作格式字符串,调用 format 方法,并把解包后的列表作为参数传入。这样你就能正确地填充格式字符串中的所有位置。

所以,你 可以 这样做。不过,这其实并不是一个实用的主意。这样看起来有点混乱,也不太能表达你的意图。更好的方法是分别处理列表中的每个项目,单独格式化,然后再把它们连接在一起:

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

至于逐行打印元素,当然,更明显的方法是,不需要构建一个长长的带换行符的字符串,而是直接循环遍历这些项目,逐个打印出来:

for item in my_list:
    print(item)

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

当然,正如thefourtheye所建议的,如果每次循环的操作都很简单,你也可以把整个列表传给打印函数,并设置 sep='\n',这样就能把每个元素打印在不同的行上。

撰写回答