如何在python3x中以垂直和水平的方式格式化列表?

2024-10-05 01:57:33 发布

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

我正在努力开发一种新的加密系统。我想横向和纵向格式化一个列表。为了教育 例如

l1=[A,B,C,£,D,E,F,£,G,H,I...,£,W,X,Y,Z]#(continues like phone keyboard)

当它看到“£”时,我希望它能制作一个新的专栏 有些列包含4个字母 我想把它格式化为:

A D G     W
B E H ... X
C F I     Y
          Z

稍后将执行此操作: İ如果我们想让它写“OMG”:

M M G       . * *
N N H ----> . . .
O O I       * . .

Tags: l1列表系统字母phonelikeomgkeyboard
2条回答
import itertools
l1=['A','B','C'] 
l2=['D','E','F','G'] 

for first, last in list(itertools.zip_longest(l1, l2, fillvalue=' ')): 
    print(first, last)

输出

A D
B E
C F
  G

要格式化列表,可以使用itertools.zip_longest

import itertools
l1=['A','B','C']
l2=['D','E','F','G']
new_l = '\n'.join(' '.join(i) for i in itertools.zip_longest(l1, l2, fillvalue=' '))
print(new_l)

输出:

A D
B E
C F
  G

编辑:您可以使用itertools.groupby

import itertools
l1=['A','B','C','£','D','E','F','£','G','H','I','£','W','X','Y','Z']
new_l = zip(*[list(b) for a, b in itertools.groupby(l1, key=lambda x:x != '£') if a])
final_l = '\n'.join(' '.join(b) for b in new_l)

输出:

A D G W
B E H X
C F I Y

相关问题 更多 >

    热门问题