并排均匀打印两个均匀填充的列表

2024-04-26 10:05:38 发布

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

我正在使用以下代码生成两个列表,名称列表和成绩列表。

nameList[]        
gradeList[]
for row in soup.find_all('tr'):
        name = row.select('th strong')
        grade = row.select('td label')
        if grade and name:
            if "/" in grade[0].text:
                gradeList.append(grade[0].text)
                nameShort = re.sub(r'^(.{20}).*$', '\g<1>...', str(name[0].text))
                nameList.append(nameShort)

产生类似于:

nameList = [“grade 1”,”grade 2222222222”,”grade 3”]
gradeList = [“1/1”,”2/2”,”100000/100000”]

我希望程序将列表打印成两列,并排。在每列中,我希望数据左对齐。列表(毫无疑问)将始终均匀填充。第一列(名称列表)的长度永远不会超过25个字符。我要找的是类似以下的:

        Assignment          Grade
0       grade 1             1/1
1       grade 2222222222    2/2
2       grade 3             100000/100000

我试过使用pandas,但格式很奇怪,不合适。它不会像我想的那样向左对齐。我相信这是因为数据在两个列表中都有不同的字符长度(如上图所示)。


Tags: 数据textnamein名称列表ifselect
2条回答

给出两个列表

nameList = ['grade 1','grade 2222222222','grade 3']
gradeList = ['1/1','2/2','100000/100000']

制表符分隔格式。使用zip()two同时遍历两个列表

print 'Assignment \t\tGrade' 
for n,g in zip(nameList,gradeList):
    print n + '\t\t\t' + g


Assignment         Grade
grade 1            1/1
grade 2222222222   2/2
grade 3            100000/100000

使用^{}

nameList = ["grade 1", "grade 2222222222", "grade 3"]
gradeList = ["1/1", "2/2", "100000/100000"]

fmt = '{:<8}{:<20}{}'

print(fmt.format('', 'Assignment', 'Grade'))
for i, (name, grade) in enumerate(zip(nameList, gradeList)):
    print(fmt.format(i, name, grade))

输出:

        Assignment          Grade
0       grade 1             1/1
1       grade 2222222222    2/2
2       grade 3             100000/100000

或者,也可以使用^{} style formatting using % operator

fmt = '%-8s%-20s%s'

print(fmt % ('', 'Assignment', 'Grade'))
for i, (name, grade) in enumerate(zip(nameList, gradeList)):
    print(fmt % (i, name, grade))

相关问题 更多 >