Python中的数据表

3 投票
6 回答
3046 浏览
提问于 2025-04-17 00:02

我在Python中有一个二维列表,长得像这样:

[['Something', 'Something else', 'Another thing'],
 ['Other things', 'More data', 'Element'],
 ['Stuff', 'data', 'etc']]

我希望它能被打印成这样:

    Something    Something else Another thing
    Other things More data      Element
    Stuff        data           etc

6 个回答

1
from itertools import chain

ll = [['Something', 'Something else', 'Another thing'],
 ['Other things', 'More data', 'Element'],
 ['Stuff', 'data', 'etc']]

# get the length of the longest item. 
# For simplicity, I use the same width for all columns
a = max(len(s) for s in chain.from_iterable(ll)) + 1 

# make a format string with the max
f = ('{:<' + str(a) + '}').format

# print the list
print '\n'.join(''.join(f(s) for s in sl) for sl in ll)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

2

你可以使用字符串的 format 方法,或者更早的字符串插值运算符,把字符串放进固定长度的字段里。具体可以查看 格式字符串 的文档。

使用这个方法的循环也不一定会很难看。

7
l = [['Something', 'Something else', 'Another thing'],
     ['Other things', 'More data', 'Element'],
     ['Stuff', 'data', 'etc']]
sub1 = [
    [s.ljust(max(len(i) for i in column)) for s in column]
    for column in zip(*l)]
for p in [" ".join(row) for row in zip(*sub1)]: print p

这里,首先通过 zip(*l) 将列表进行转换:每个子列表都作为一个独立的参数传递给 zip()。结果是一个新的列表,它把每个旧列表中相同位置的元素组合在一起,所以你会得到 [['Something', 'Other things', 'Stuff'], ['Something else', 'More data', 'data'], ...]

接着,长度需要匹配的元素会在同一个 column 中。在这些 column 中,字符串会通过 ljust() 方法调整到该组中最长的长度。

之后,调整长度后的新列表会再次进行转换,方法和上面一样,然后用 " " 将各个部分连接起来。

最后,生成的这个一维列表会逐个打印出来。

撰写回答