【问题标题】:How can I align every word from this list?如何对齐此列表中的每个单词?
【发布时间】:2020-07-21 22:12:57
【问题描述】:

我在一个文件中有一个列表列表:

[ [ 'aaaaa', 'bbb','ccccccccc' ], [ 'aaaaa', 'bbbbbb','cccccc' ], [ 'aaa', 'bbb','ccccccccc' ] ]
aaaaa bbb ccccccccc
aaaaa bbbbbb cccccc
aaa bbb ccccccccc

我用它来做一些分析,但是由于单词的长度,很难阅读,我想把它格式化成这样:

aaaaa  bbb     ccccccccc
aaaaa  bbbbbb  cccccc
aaa    bbb     ccccccccc

列之间可能有一些大空间。

我想我可以使用.format 函数,但我尝试了,但没有找到解决方案。

我只能使用 Python 2.7。

【问题讨论】:

  • 当你尝试这样做时究竟是什么问题?
  • 为什么不能使用 Python 3?
  • 我不能,因为该项目暗示我只使用 python 2.7

标签: python python-2.7 formatting


【解决方案1】:

用 Python2.7 测试:

lst = [ [ 'aaaaa', 'bbb','ccccccccc' ], [ 'aaaaa', 'bbbbbb','cccccc' ], [ 'aaa', 'bbb','ccccccccc' ] ]

widths = [max(len(j) for j in i) for i in zip(*lst)]
s = ''.join('{{:<{}}}'.format(w+2) for w in widths)

for v in lst:
    print(s.format(*v))

打印与该列内字符串的最大宽度 + 2 个额外字符对齐的每一列:

aaaaa  bbb     ccccccccc  
aaaaa  bbbbbb  cccccc     
aaa    bbb     ccccccccc  

【讨论】:

  • 我有一个与您的解决方案非常相似的解决方案,因此无法作为单独的答案发布,但只是一个问题:我在您没有的格式的宽度之后有一个 s -即"{{:&lt;{}s}}".format(width) - 你认为这会有什么不同吗?
  • 非常感谢,刚刚尝试了您的解决方案,它有效!
  • 刚试了一下,没有s,好像没什么区别。
  • @alaniwi 根据documentation 's' - String format. This is the default type for strings and may be omitted. 所以如果你有它也没关系。
【解决方案2】:
my_list = [ [ 'aaaaa', 'bbb','ccccccccc' ], [ 'aaaaa', 'bbbbbb','cccccc' ], [ 'aaa', 'bbb','ccccccccc' ] ]

# max_lengths = [max(len(y) for y in x) for x in zip(*my_list)]
# Can do above and get max lengths for each a, b, c etc but let us just get one global max for a neater solution

max_length = max(max(inner_list) for inner_list in my_list)

with open(target, "w") as writer:
   for inner_list in my_list:
       l_justed = [x.ljust(max_length) for x in inner_list)
       writer.writeline("    ".join(l_justed))

只是在末尾添加空格,使字符串长度为指定值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多