有没有一个函数可以打印iterables值

2024-05-15 23:43:36 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有

var = "ABCDEF"

我得到了这样的待遇

it = itertools.combinations(var,2)

有没有一个函数可以打印所有iterables的值,比如

printall(it)

而不是使用for循环


Tags: 函数forvarititertoolsprintalliterablesabcdef
3条回答

您可以使用允许按您的要求格式化每个元素的格式:

>>> 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'}

我正在使用一个列表,但是任何iterable都可以。

这取决于你想要什么,如果你想打印出所有的值,你需要计算它们-一个iterable不保证在所有的值都被请求之后才进行计算,所以最简单的方法是make a list

print(list(iterable))

这将打印出正常列表格式的项目,这可能是合适的。如果您希望每一项都在一个新行中,最好的选择是,如您所提到的,一个简单的for循环:

for item in iterable:
    print(item)

如果您不需要特定格式的数据,而只需要它是可读的(例如,不是所有的数据都在一行),那么您可能需要签出the ^{} module

最后一个选项,我并不认为是最佳的,但是为了完整性,在3.x中是可能的,其中the ^{} function非常灵活:

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

在这里,我们将unpack the iterable作为print()的参数,然后将分隔符设为换行符(与通常的空格相反)。

您可以使用str.join方法并在新行上连接iterable的每个元素。

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

相关问题 更多 >