首页 > 解决方案 > 将多个数组打印为列

问题描述

我正在尝试打印一个数组列表,其中每个数组都是一列。我有以下数组:

cat=['aba','vdv']
dog=['tul','baba']

我可以通过执行以下操作来完成我想要的:

for x in zip(cat,dog):
    print '\t'.join(x)

aba tul
vdv baba

但是,如果我想添加更多列,这很麻烦,所以我希望能够设置catdog到单个变量,然后迭代该变量,并将每个数组打印为表中的列,如下所示:

cat=['aba','vdv']
dog=['tul','baba']
df=[cat,dog]

for x in zip(df):
    print '\t'.join(x)

但是,这会产生错误。任何建议将不胜感激。

标签: python

解决方案


zip接收迭代作为单独的参数,而不是在列表中。使用 时zip(df),您实际上是将单个可迭代对象传递给 zip ( [cat, dog])。相比:

zip(cat, dog)  # what you should do
zip([cat, dog])  # what you are doing

在第一种情况下,cat并且dog被视为单独的可迭代对象,因此x在每次迭代期间具有这些值:

  1. ('aba', 'tul',) # (cat[0], dog[0])
  2. ('vdv', 'baba') # (cat[1], dog[1])

在第二种情况下[cat, dog],被认为是单个可迭代的,因此x在每次迭代期间都有这些值:

  1. (['aba', 'vdv'],) # [cat, dog][0]
  2. (['tul', 'baba'],) # [cat, dog][1]

要将列表中的每个项目作为单独的参数传递,您必须将列表解压缩为单独的参数:

cat = ['aba', 'vdv']
dog = ['tul', 'baba']
df = [cat, dog]

for x in zip(*df):  # note the asterisk before df
    print('\t'.join(x))  # using Python 3, so added parenthesis

你也可以用这个替换循环:

print(*('\t'.join(x) for x in zip(*df)), sep='\n')

推荐阅读