是否有任何单个函数可以打印iterable的值?

2024-05-15 22:09:31 发布

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

假设我有一个iterable:

var = "ABCDEF"

我得到了如下的iterable:

it = itertools.combinations(var,2)

是否有任何一个函数可以打印iterables的所有值

printall(it)

而不是使用for循环


Tags: 函数forvarititerableitertoolsprintalliterables
3条回答

这取决于你想要什么,如果你想打印出所有的值,你需要计算它们-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))

您可以使用允许每个元素按照您的意愿进行格式化的格式:

>>> 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都可以

相关问题 更多 >