17

と呼ばれるタプルのリストがありますgradebook。各リスト要素は、学生が獲得できるクラスと成績に対応するタプルです。例えば、

gradebook = [('Math 212', 'Linear Algebra', 'Fall 2012', 'B'),  
             ('CS 130', 'Python', 'Spring 2013', 'A')]

等々。次のように印刷したいと思います。

Class: Math 212.....Subject: Linear Algebra.....Term: Fall 2012.....Grade: B`  
Class: CS 130.......Subject: Computer Science...Term: Spring 2013...Grade: A`  

リスト内の各タプルを調べて、タプルの各要素を出力できるようにしたいと思います。どうすればこれを達成できますか?

編集:これは私が今持っているものです:

for aTuple in gradebook:
    print(aTuple)

申し訳ありませんが、私は Python に非常に慣れていないため、これがどのように機能するのかよくわかりません。

4

8 に答える 8

18

一般的な形式では、リストを反復処理してタプルのインデックスにアクセスできます。

for x in gradebook:
    print x[0], x[1]

この例の x[0] はタプルの最初の部分を示し、 x[1] .... などです。その形式をいじって実験すれば、あとは自分でできるはずです。

編集: 他の回答のいくつかはここでより優れていますが、タプルを展開し、「Python の方法」により厳密に従うという意味で。そのような:

a, b, c = ('a','b','c')
于 2013-02-28T04:03:38.407 に答える
9

または、これを行うことができます...

for id, name, semester, grade in gradebook:
    print id, name, semester, grade
于 2013-02-28T04:04:28.937 に答える
4
gradebook = [('Math 212', 'Linear Algebra', 'Fall 2012', 'B'), ('CS 130', 'Python', 'Spring 2013', 'A')]

fieldwidths = 13, 19, 14, 1
for tup in gradebook:
  tup = (s.ljust(w, '.') for s,w in zip(tup, fieldwidths))
  print 'Class: {}Subject: {}Term: {}Grade: {}'.format(*tup)

あなたの例に合わせてフィールド幅を手動で設定しました。しかし、成績表の要素の長さの列の最大値に基づいて、スマートな方法でフィールド幅を生成することを好むかもしれません。

次回は、成績表エントリのより良いデータ構造はdictではなく になりtupleます。

于 2013-02-28T04:12:21.600 に答える
1

__str__(self)class で "Class: Math 212.....Subject: Linear Algebra.....Term: Fall 2012..... Grade: B" のような文字列を返す関数 Naming を定義できます。次に、コードを使用できます。

for aTuple in gradebook:
    print(aTuple)

期待される出力を得るために。

于 2013-02-28T05:41:10.210 に答える
0

文字列フォーマットを使用します:

for aTuple in gradebook:
        print('Class: %s.....Subject: %s.....Term: %s.....Grade: %s' % aTuple)
于 2013-02-28T04:04:04.323 に答える
0

要素名を割り当てることでインデックスを作成できます (何かを計算している場合に便利な場合があります)。

for (a, b, c, d) in gradebook:
    print "Class: ", a, "...Subject: ", b, "...Term: ", c, "...Grade: ", d

クラス: 数学 212 ...科目: 線形代数 ...学期: 2012 年秋 ...グレード: B

クラス: CS 130 ...科目: Python ...学期: 2013年春 ...グレード: A

間隔をより均等にするには:

for (a, b, c, d) in gradebook:
    print "Class: ", a, "."*(20-len(a)), "Subject: ", b, "."*(20-len(b)), "Term: ", c, "."*(20-len(c)), "Grade: ", d

クラス: 数学 212 .......... 科目: 線形代数 ...... 学期: 2012 年秋 ........... グレード: B

クラス: CS 130 ......... 科目: Python .......... 学期: 2013 年春 ......... 学年:あ

于 2013-02-28T04:18:17.457 に答える
0

Python のより高度な書式設定オプションのいくつかにはあまり詳しくありません。そうは言っても、これは要求どおりに結果を表示します。インデックスによって各タプルの要素にアクセスできます。 '.'*(#-len('column info'+g[i]))列幅から文字列の長さを引いて、正しいピリオド数を求めます。要素間にスペースを入れずにこれを印刷するには、 in を使用しsep=''ますprint()

gradebook = [('Math 212', 'Linear Algebra', 'Fall 2012', 'B'), ('CS 130', 'Python', 'Spring 2013', 'A')]
for g in gradebook:
  print('Class: ', g[0], '.'*(20-len('Class: '+g[0])), 
  'Subject: ', g[1], '.'*(28-len('Subject: '+g[1])), 
  'Term: ', g[2], '.'*(20-len('Term: '+g[2])), 
  'Grade: ', g[3], sep = '')
于 2013-02-28T04:23:05.493 に答える