我做了一个名字和他们的主目录的列表。如何使列与最长字符串一样长,在本例中为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 |