1

所以这可能是关于使用'.format'在python中输出格式的一个非常基本的问题,因为我是一个初学者,所以我一生都无法弄清楚这一点。我试图尽可能详细,以确保没有混淆。

让我给你一个例子,这样你就可以更好地理解我的困境。考虑以下程序

list = (['wer', 'werwe', 'werwe' ,'wer we'])   # list[0], list[1], list[2], list[3]
list.append(['vbcv', 'cvnc', 'bnfhn', 'mjyh']) # list[4]
list.append(['yth', 'rnhn', 'mjyu', 'mujym'])  # list[5]
list.append(['cxzz', 'bncz', 'nhrt', 'qweq'])  # list[6]

first = 'bill'
last = 'gates'

print ('{:10} {:10} {:10} {:10}'.format(first,last,list[5], list[6]))     

可以理解的是,这将给出输出:

bill       gates      ['yth', 'rnhn', 'mjyu', 'mujym'] ['cxzz', 'bncz', 'nhrt', 'qweq']

所以这是我真正的问题。我正在从书中做这个练习题,我不明白答案。下面的程序会让你很好地了解我们想要什么样的输出:

students = []
students.append(['DeMoines', 'Jim', 'Sophomore', 3.45]) #students[0]
students.append(['Pierre', 'Sophie', 'Sophomore', 4.0]) #students[1]
students.append(['Columbus', 'Maria', 'Senior', 2.5])   #students[2]
students.append(['Phoenix', 'River', 'Junior', 2.45])   #students[3]
students.append(['Olympis', 'Edgar',  'Junior', 3.99])  #students[4]
students.append(['van','john', 'junior', 3.56])         #students[5]
def Grades(students):
    print ('Last       First      Standing        GPA')
    for students in students:
        print('{0:10} {1:10} {2:10} {3:8.2f}'.format(students[0],students[1],students[2],students[3]))

我们试图得到的输出是一种表格,它给出了所有学生的所有统计数据——

Last       First      Standing        GPA
DeMoines   Jim        Sophomore      3.45
Pierre     Sophie     Sophomore      4.00
Columbus   Maria      Senior         2.50
Phoenix    River      Junior         2.45
Olympis    Edgar      Junior         3.99
van        john       junior         3.56

所以这就是我不明白的。我们在两个示例中使用基本相同的东西,即列表中的列表。对于我的第一个示例,打印语句是:

print('{:10} {:10} {:10} {:10}'.format(first, last, list[5], list[6]))  

wherelist[5]list[6]are 列表本身,它们被完整打印,正如您从输出中看到的那样。但这不会发生在书本问题中。在那里,打印声明说

print('{0:10} {1:10} {2:10} {3:8.2f}'.format(students[0], students[1], students[2], students[3])) 

从表格输出中可以看出,这里students[0]仅指'DeMoines'。但是,如果您只是students[0]在 Python 解释器中运行该语句,它会给出整个子列表,因为它应该。

['DeMoines', 'Jim', 'Sophomore', 3.45]

所以,基本上,我有两个问题,为什么dostudents[0]有两种不同的含义,为什么不像我们用andstudents[0]那样打印整个列表?list[5]list[6]

4

2 回答 2

3

查看for 循环

for students in students:
#   ^^^^^^^^

因此,students(inside loop) 实际上并不是指list 的 list。并且正如预期的那样,从list of list 的元素students[0]引用第一个元素。

我建议students从函数参数替换,比如说,用all_students或类似的东西。

于 2013-05-29T13:36:50.160 回答
1

尝试将变量重命名list为不是保留字或内置函数或类型的名称。

让初学者感到困惑的事情 - 迟早会发生在每个人身上 - 如果您重新定义或以意想不到的方式使用保留字或内置函数会发生什么。

如果你这样做

list = [1, 2, 3, 4]

您重新绑定名称list以不再指向内置list数据类型,而是指向当前范围内的实际列表[1, 2, 3, 4]。这几乎总是不是你打算做的。使用变量dir是一个类似的陷阱。

也不要()在列表赋值的方括号周围使用额外的括号。类似的东西words = ['wer', 'werwe', 'werwe' ,'wer we']就足够了。

通常考虑为变量选择哪些名称。students是描述性的,有用的评论,list不是。此外,如果list当前持有一个列表,您的算法可能会在稍后更改为变量持有一个set或任何其他容器类型。那么基于类型的变量名甚至会产生误导。

于 2013-05-29T13:36:35.750 回答