我最近开始学习Python,在使用列表时遇到了这个问题。
这里我将一些电影名称分配给变量movies
:
>>> movies = ["dragon","dragon warrior","kungfu","kungfu panda"]
分配后,我使用print
命令执行它:
>>> print(movies)
输出如下:
['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']
同样地,当我开始在具有相同print
命令的列表中使用for循环时,输出完全不同。由于for循环,我无法理解它是如何改变的:
>>> for fav_movie in movies:
print(fav_movie)
输出:
dragon
dragon warrior
kungfu
kungfu panda
为什么相同的打印命令的工作方式不同?
答案 0 :(得分:2)
print(movies)
打印列表对象的str
版本,而在循环中,您将在列表中打印单个项目的str
版本。
>>> print(movies)
['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']
相当于:
>>> print(movies.__str__()) #or simply print(str(movies))
['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']
请注意,您在列表元素中看到了引号,这是因为使用的表示形式是这些对象的repr
版本。列表的repr
版本也会包含引号。
>>> repr(movies)
"['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']"
repr
是一个计算机友好的输出,str
是人类友好的,一个很好的例子就是花车:
>>> x = 1.1 + 2.2
>>> print repr(x)
3.3000000000000003
>>> print str(x)
3.3
另请注意,repr
返回的字符串可以使用eval
重新生成该对象。
有关详情,请阅读:Difference between str and repr in Python。
在循环内部,您打印的是每个项目的str
版本:
>>> print(movies[0])
dragon
>>> print(movies[0].__str__())
dragon
>>> for movie in movies:
... print(str(movie))
...
dragon
dragon warrior
kungfu
kungfu panda
答案 1 :(得分:1)
您正在打印实际列表对象的第一个命令,第二个命令循环遍历列表的元素并逐个打印。
答案 2 :(得分:1)
第一个打印语句是打印列表;而第二个是打印字符串。
答案 3 :(得分:1)
这就是Python的工作方式。使用print(movies)
打印整个列表movies
的字符串表示形式,其中:
for fav_movie in movies:
print(fav_movie)
一次打印movies
个项目。
>>> l = [1, 2, 3]
>>> print(l)
[1, 2, 3]
>>> for i in l: print(i)
...
1
2
3
>>>
答案 4 :(得分:1)
除了iCodez的回答,值得注意的是print会引入换行符。例如:
>>> import sys
>>> l = ["a", "b", "c"]
>>> print l
['a', 'b', 'c']
>>> for i in l: print i
...
a
b
c
>>> for i in l: sys.stdout.write(i)
...
abc>>>
答案 5 :(得分:0)
print(x)
执行以下操作:
1。)如果x
不是字符串,请通过调用x.__str__()
将其转换为此字符串。
>>> 'Hello!'.__str__()
'Hello!'
>>> [1,2,3].__str__()
'[1, 2, 3]'
2。)输出该字符串
3。)开始一个新行(你实际上可以关掉它)。
print(movies)
实际上会print(movies.__str__())
,而
for movie in movies:
print(movie)
将浏览电影,并分别打印每部电影。由于电影已经是字符串,因此不需要转换步骤。由于第3步,每部电影都有自己的路线。