所以这可能是一个关于在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]))
,其中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]
和list[6]
那样打印整个列表?
看for循环:
for students in students:
# ^^^^^^^^
因此,students
(内循环)实际上并不是指向list的list。students[0]
从list of lists中的元素中引用中的第一个元素。我建议从函数参数中替换students
,例如,用all_students
或类似的东西。
尝试将变量list
重命名为非保留字或内置函数或类型。
让初学者感到困惑的是——每个人迟早都会遇到这种情况——重新定义或无意中使用保留词或内置词会发生什么。
如果你这样做
list = [1, 2, 3, 4]
重新绑定名称list
,不再指向内置list
数据类型,而是指向当前作用域中的实际列表[1, 2, 3, 4]
。这几乎总是不是你想要做的。使用变量dir
也是一个类似的陷阱。
也不要在列表赋值的方括号周围使用额外的括号()
。比如words = ['wer', 'werwe', 'werwe' ,'wer we']
就足够了。
通常考虑为变量选择哪些名称。students
是描述性的,有帮助的评论,list
不是。此外,如果list
当前保存一个列表,您的算法可能会在稍后更改变量保存set
或任何其他容器类型。那么基于类型的变量名甚至会产生误导。