有没有单个函数可以打印可迭代对象的值?
假设我有一个可以遍历的东西:
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()
的参数,然后把分隔符设置为换行符(而不是通常的空格)。