输出格式化Python 3.3

时间:2013-05-29 13:25:50

标签: python python-3.x output-formatting

所以这可能是一个非常基本的问题,关于使用'.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语句是:

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

其中list[5]list[6]是列表本身,它们是完整打印的,正如您从输出中看到的那样。 但这不会发生在图书问题中。那里,print语句说

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

从表格输出中可以看出,此处students[0]仅指'DeMoines'。但是如果你只是在Python解释器中运行语句students[0],它就会给出整个子列表。

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

所以,基本上,我有两个问题,为什么students[0]有两个不同的含义,为什么students[0]不能打印整个列表,就像我们使用list[5]和{{ 1}}?

2 个答案:

答案 0 :(得分:3)

查看 for loop

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

因此,students(内部循环)实际上并不引用列表列表students[0]正如预期的那样,从列表中的元素引用第一个元素

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

答案 1 :(得分:1)

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

如果你重新定义或以非预期的方式使用保留词或内置词,那么初学者会感到困惑 - 并且迟早会发生在每个人身上 - 会发生什么。

如果你这样做

list = [1, 2, 3, 4]

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

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

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