我有一个名为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很新,所以我真的不明白它是如何工作的。
答案 0 :(得分:11)
通用格式,您可以遍历列表并访问元组的索引:
for x in gradebook:
print x[0], x[1]
在这个例子中,x [0]将为您提供元组的第一部分,以及x [1] ....等等。 乱七八糟地尝试这种格式,你应该能够自己完成其余的工作。
编辑:虽然其他一些答案在这里更好,但从某种意义上说,他们解开元组并更密切地遵循“Python的方式”。像这样:
a, b, c = ('a','b','c')
答案 1 :(得分:8)
或者你可以这样做......
for id, name, semester, grade in gradebook:
print id, name, semester, grade
答案 2 :(得分: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
。
答案 3 :(得分:0)
for aTuple in gradebook:
print('Class: %s.....Subject: %s.....Term: %s.....Grade: %s' % aTuple)
答案 4 :(得分: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年春季........等级:A
答案 5 :(得分:0)
我不太熟悉python中一些更高级的格式化选项。话虽如此,这将按要求显示结果。您可以通过索引访问每个元组中的元素。 '.'*(#-len('column info'+g[i]))
通过从列宽中减去字符串的长度来给出正确的句点数。要在元素之间不加空格打印,请使用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 = '')
答案 6 :(得分:0)
你可以定义一个命名__str__(self)
的函数,它返回一个字符串,如“Class:Math 212 ......主题:线性代数......术语:2012年秋季.....等级:B“在课堂上。
然后你可以使用你的代码:
for aTuple in gradebook:
print(aTuple)
获得预期的输出。
答案 7 :(得分:0)
gradebook = [('Math 212', 'Linear Algebra', 'Fall 2012', 'B'),
('CS 130', 'Python', 'Spring 2013', 'A'),
('Economics History','1914','Fall 14','D')]
fields = '...'.join( '{:.<%ds}' % max(map(len,cat))
for cat in zip(*gradebook) )
print 'fields :\n%r\n\n' % fields
def disp(x,fields=fields):
if all(isinstance(el,tuple) for el in x):
# x is a collections of tuples
print '\n'.join(fields.format(*el) for el in x)
elif all(isinstance(el,str) for el in x):
# x is a collection of strings
print fields.format(*x)
print 'disp(gradebook) :\n\n',
disp(gradebook)
print '\n'
print 'disp(gradebook[1]) :\n\n',
disp(gradebook[1])
结果
fields :
'{:.<17s}...{:.<14s}...{:.<11s}...{:.<1s}'
disp(gradebook) :
Math 212............Linear Algebra...Fall 2012.....B
CS 130..............Python...........Spring 2013...A
Economics History...1914.............Fall 14.......D
disp(gradebook[1]) :
CS 130..............Python...........Spring 2013...A