有没有单个函数可以打印可迭代对象的值?

30 投票
5 回答
36783 浏览
提问于 2025-04-17 16:42

假设我有一个可以遍历的东西:

var = "ABCDEF"

我这样获取这个可遍历的东西:

it = itertools.combinations(var,2)

有没有什么简单的函数可以一次性打印出所有的值,比如说:

printall(it)

而不是用 for 循环来一个一个打印呢?

5 个回答

1

你可以使用一种格式,这样每个元素都可以按照你想要的方式来格式化:

>>> print '\n'.join('{:>10}'.format(e) for e in iter([1,2,'1','2',{1:'1'}]))
         1
         2
         1
         2
  {1: '1'}

每个元素不一定要是字符串,但如果不是字符串的话,它必须有一个叫做 __repr__ 的方法。

然后你就可以轻松地写出你想要的函数:

>>> def printall(it,w): print '\n'.join('{:>{w}}'.format(e,w=w) for e in it)
>>> printall([1,2,'3','4',{5:'6'}],10)
         1
         2
         3
         4
  {5: '6'}

我这里用的是一个列表,但任何可迭代的东西都可以。

5

你可以使用 str.join 这个方法,把可迭代对象中的每个元素用换行符连接起来。

print('\n'.join(it))
45

这主要取决于你想要什么。如果你想打印出所有的值,你需要先计算它们——一个可迭代对象并不保证在你请求所有值之前就会计算出这些值。所以,最简单的方法就是把它们放到一个列表里

print(list(iterable))

这样会以正常的列表格式打印出这些项目,这可能是合适的。如果你想让每个项目都在新的一行,最好的办法就是你提到的,使用一个简单的for循环:

for item in iterable:
    print(item)

如果你不需要数据以特定的格式呈现,只是希望它可读(比如不是全部在一行),你可以看看这个pprint模块

最后一个选项,我觉得不是最优的,但为了完整性还是提一下,在3.x版本中,这个print()函数非常灵活:

print(*iterable, sep="\n")

在这里,我们将可迭代对象展开作为print()的参数,然后把分隔符设置为换行符(而不是通常的空格)。

撰写回答