web-dev-qa-db-ja.com

2つの均等に配置されたリストを均等に並べて印刷する

次のコードを使用して、nameListとgradeListの2つのリストを作成しています。

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”]

プログラムでリストを2つのきれいな列に並べて印刷したいと思います。各列内で、データを左揃えにします。リストは(必ず)常に均等に入力されます。最初の列(nameList)が25文字を超えることはありません。私が探しているものは次のようになります:

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

pandasを使用しようとしましたが、機能しましたが、フォーマットがおかしく、位置がずれていました。希望どおりに左揃えになりませんでした。これは、それぞれのデータが原因で発生したと思います。両方のリストで文字の長さが異なります(上記を参照)。

8

str.format

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

または、 printfスタイルの書式設定(%演算子を使用) を使用することもできます。

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

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

与えられた2つのリスト

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

タブ区切り形式。 Zip()を使用して、2つは両方のリストを同時に繰り返します

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
6
Bob Haffner