如何使列表中的列与列表中最长的字符串一样长?



我做了一个名字和他们的主目录的列表。如何使列与最长字符串一样长,在本例中为Kareena Kapoor |/home/users2/kkapoor

names = ['Kenny Rogers', 'Reba McEntire', 'Johnny Cash', 'Tito Jackson', 'Tzuyu', 'Kareena Kapoor']
dirname = ['/home/users/krogers', '/home/rmcentire', '/home/users/jcash', '/home/hut/titoj', 
'/home/users/tzuyu', '/home/users2/kkapoor']

print("+-------+--------------------------------+")
print("|", names[0], "|", dirname[0], "    |")
print("|", names[1], "|", dirname[1], "       |")
print("|", names[2], "|", dirname[2], "       |")
print("|", names[3], "|", dirname[3], "        |")
print("|", names[4], "|", dirname[4], "             |")
print("|", names[5], "|", dirname[5], " |")
print("+-------+--------------------------------+")

使用字符串左/右对齐函数

一旦你计算了每个字符串列表的最大长度,你可以使用str.ljust()的最大长度左点亮字符串。查看更多详细信息。

names = ['Kenny Rogers', 'Reba McEntire', 'Johnny Cash', 'Tito Jackson', 'Tzuyu', 'Kareena Kapoor']
dirname = ['/home/users/krogers', '/home/rmcentire', '/home/users/jcash', '/home/hut/titoj', 
'/home/users/tzuyu', '/home/users2/kkapoor']
mname = max([len(i) for i in names])
mdir = max([len(i) for i in dirname])

print("+----------------+-----------------------+")
print("|", names[0].ljust(mname), "|", dirname[0].ljust(mdir), " |")
print("|", names[1].ljust(mname), "|", dirname[1].ljust(mdir), " |")
print("|", names[2].ljust(mname), "|", dirname[2].ljust(mdir), " |")
print("|", names[3].ljust(mname), "|", dirname[3].ljust(mdir), " |")
print("|", names[4].ljust(mname), "|", dirname[4].ljust(mdir), " |")
print("|", names[5].ljust(mname), "|", dirname[5].ljust(mdir), " |")
print("+----------------+-----------------------+")
+----------------+-----------------------+
| Kenny Rogers   | /home/users/krogers   |
| Reba McEntire  | /home/rmcentire       |
| Johnny Cash    | /home/users/jcash     |
| Tito Jackson   | /home/hut/titoj       |
| Tzuyu          | /home/users/tzuyu     |
| Kareena Kapoor | /home/users2/kkapoor  |
+----------------+-----------------------+

For循环使用zip而不是多个打印

我建议使用一个for循环来压缩,而不是使用多个print语句。

print('+'+'-'*(mname+2)+'+'+'-'*(mdir+3)+'+')
for i,j in zip(names, dirname):
print("|", i.ljust(mname), "|", j.ljust(mdir), " |")
print('+'+'-'*(mname+2)+'+'+'-'*(mdir+3)+'+')
+----------------+-----------------------+
| Kenny Rogers   | /home/users/krogers   |
| Reba McEntire  | /home/rmcentire       |
| Johnny Cash    | /home/users/jcash     |
| Tito Jackson   | /home/hut/titoj       |
| Tzuyu          | /home/users/tzuyu     |
| Kareena Kapoor | /home/users2/kkapoor  |
+----------------+-----------------------+

使用表格库

您可以pip安装表格库并使用它来打印您的数据。它提供了一些有趣的表格式,如'plain''simple''grid''pipe''orgtbl''rst''mediawiki''latex''latex_raw''latex_booktabs'

#!pip install tabulate
from tabulate import tabulate
print(tabulate(zip(names, dirname), tablefmt="grid"))
print(tabulate(zip(names, dirname), tablefmt="orgtbl"))
print(tabulate(zip(names, dirname), tablefmt="rst"))
#grid
+----------------+----------------------+
| Kenny Rogers   | /home/users/krogers  |
+----------------+----------------------+
| Reba McEntire  | /home/rmcentire      |
+----------------+----------------------+
| Johnny Cash    | /home/users/jcash    |
+----------------+----------------------+
| Tito Jackson   | /home/hut/titoj      |
+----------------+----------------------+
| Tzuyu          | /home/users/tzuyu    |
+----------------+----------------------+
| Kareena Kapoor | /home/users2/kkapoor |
+----------------+----------------------+

#orgtbl
| Kenny Rogers   | /home/users/krogers  |
| Reba McEntire  | /home/rmcentire      |
| Johnny Cash    | /home/users/jcash    |
| Tito Jackson   | /home/hut/titoj      |
| Tzuyu          | /home/users/tzuyu    |
| Kareena Kapoor | /home/users2/kkapoor |

#rst
==============  ====================
Kenny Rogers    /home/users/krogers
Reba McEntire   /home/rmcentire
Johnny Cash     /home/users/jcash
Tito Jackson    /home/hut/titoj
Tzuyu           /home/users/tzuyu
Kareena Kapoor  /home/users2/kkapoor
==============  ====================

您可以使用Python中的tabulate库来完成此操作。这个代码很简单

from tabulate import tabulate
headers = ["Names", "Directories"]
names = ['Kenny Rogers', 'Reba McEntire', 'Johnny Cash', 'Tito Jackson', 'Tzuyu', 'Kareena Kapoor']
dirname = ['/home/users/krogers', '/home/rmcentire', '/home/users/jcash', '/home/hut/titoj', 
'/home/users/tzuyu', '/home/users2/kkapoor']
print(tabulate(zip(names, dirname), headers, tablefmt="grid"))

这是执行时的输出。

+----------------+----------------------+
| Names          | Directories          |
+================+======================+
| Kenny Rogers   | /home/users/krogers  |
+----------------+----------------------+
| Reba McEntire  | /home/rmcentire      |
+----------------+----------------------+
| Johnny Cash    | /home/users/jcash    |
+----------------+----------------------+
| Tito Jackson   | /home/hut/titoj      |
+----------------+----------------------+
| Tzuyu          | /home/users/tzuyu    |
+----------------+----------------------+
| Kareena Kapoor | /home/users2/kkapoor |
+----------------+----------------------+

如果你想测试代码,这里有一个实时可执行Deepnote笔记本的链接。

这个怎么样:

names = ['Kenny Rogers', 'Reba McEntire', 'Johnny Cash', 'Tito Jackson', 'Tzuyu', 'Kareena Kapoor']
dirname = ['/home/users/krogers', '/home/rmcentire', '/home/users/jcash', '/home/hut/titoj', 
'/home/users/tzuyu', '/home/users2/kkapoor']
longest_name = max([len(i) for i in names])
longest_dirs = max([len(j) for j in dirname])

print("+"+"-"*longest_name+"+"+"-"*longest_dirs+"+")
for n, d in zip(names, dirname):
print("|" + n + " "*(longest_name-len(n)) + "|" + d + " "*(longest_dirs-len(d)) + "|")
print("+"+"-"*longest_name+"+"+"-"*longest_dirs+"+")

使用f字符串的广义函数。左/中/右对齐使用<^>之一:

def table(*columns,justify='<'):
widths = [max(len(n) for n in c) for c in columns]
print('+','-+-'.join('-'*w for w in widths),'+',sep='-')
for row in zip(*columns):
print('|',' | '.join(f'{n:{justify}{w}}' for n,w in zip(row,widths)),'|')
print('+','-+-'.join('-'*w for w in widths),'+',sep='-')
names = ['Kenny Rogers', 'Reba McEntire', 'Johnny Cash', 'Tito Jackson', 'Tzuyu', 'Kareena Kapoor']
dirname = ['/home/users/krogers', '/home/rmcentire', '/home/users/jcash', '/home/hut/titoj', 
'/home/users/tzuyu', '/home/users2/kkapoor']
table(names,dirname)
table(names,dirname,justify='^')
+----------------+----------------------+
| Kenny Rogers   | /home/users/krogers  |
| Reba McEntire  | /home/rmcentire      |
| Johnny Cash    | /home/users/jcash    |
| Tito Jackson   | /home/hut/titoj      |
| Tzuyu          | /home/users/tzuyu    |
| Kareena Kapoor | /home/users2/kkapoor |
+----------------+----------------------+
+----------------+----------------------+
|  Kenny Rogers  | /home/users/krogers  |
| Reba McEntire  |   /home/rmcentire    |
|  Johnny Cash   |  /home/users/jcash   |
|  Tito Jackson  |   /home/hut/titoj    |
|     Tzuyu      |  /home/users/tzuyu   |
| Kareena Kapoor | /home/users2/kkapoor |
+----------------+----------------------+
Use Tabulate Module
from tabulate import tabulate
print(tabulate(zip(names,dirname)))
Output:
--------------  --------------------
Kenny Rogers    /home/users/krogers
Reba McEntire   /home/rmcentire
Johnny Cash     /home/users/jcash
Tito Jackson    /home/hut/titoj
Tzuyu           /home/users/tzuyu
Kareena Kapoor  /home/users2/kkapoor
--------------  --------------------

如果您不想使用任何额外的包,您可以这样做:

names = ['Kenny Rogers', 'Reba McEntire', 'Johnny Cash', 'Tito Jackson', 'Tzuyu', 'Kareena Kapoor']
dirname = ['/home/users/krogers', '/home/rmcentire', '/home/users/jcash', '/home/hut/titoj', 
'/home/users/tzuyu', '/home/users2/kkapoor']
mx_nm_len = max([len(x) for x in names])
mx_dirnm_len = max([len(x) for x in dirname])
print(mx_nm_len, mx_dirnm_len)
print('_'*(mx_nm_len + mx_dirnm_len + 7)) # 7 comes from the use of spaces and '|'
for n, d in zip(names, dirname):
print('| {data1:14} | {data2:20} |'.format(data1=n, data2=d))

输出:

14 20
_________________________________________
| Kenny Rogers   | /home/users/krogers  |
| Reba McEntire  | /home/rmcentire      |
| Johnny Cash    | /home/users/jcash    |
| Tito Jackson   | /home/hut/titoj      |
| Tzuyu          | /home/users/tzuyu    |
| Kareena Kapoor | /home/users2/kkapoor |

相关内容

最新更新