将多个数组打印为列

2024-10-04 09:25:04 发布

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

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

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)

然而,这会产生一个错误。如有任何建议,将不胜感激


Tags: indf列表for方式数组zipcat
2条回答

你差一点就到了,只是错过了给zip打电话时的解包

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

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

您也可以在不使用for循环的情况下执行此操作,如下所示:

print(*map('\t'.join,zip(*df)),sep='\n')

zip将iterables作为单独的参数接收,而不是在列表中。使用zip(df)时,实际上是将单个iterable传递给zip([cat, dog])。比较:

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

在第一种情况下,catdog被认为是独立的可重用项,因此x在每次迭代中都有这些值:

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

在第二种情况下[cat, dog]被视为单个iterable,因此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')

相关问题 更多 >