所以这可能是一个非常基本的问题,关于使用'.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}}?
答案 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
或任何其他容器类型的变量更改您的算法。那么基于类型的变量名称甚至会产生误导。