0

最近 Python の学習を始めましたが、リストを使用しているときにこの問題に直面しました。

ここでは、いくつかの映画の名前を variable に割り当てました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

同じ印刷コマンドの動作が異なるのはなぜですか?

4

6 に答える 6

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

詳細については、Pythonでのstrreprの違いを参照してください。

ループ内で、str各アイテムのバージョンを出力しています。

>>> print(movies[0])
dragon
>>> print(movies[0].__str__())
dragon
>>> for movie in movies:
...     print(str(movie))
...     
dragon
dragon warrior
kungfu
kungfu panda
于 2013-08-15T18:43:35.923 に答える
1

最初のコマンドで実際のリスト オブジェクトを出力し、2 番目のコマンドでリストの要素をループして 1 つずつ出力します。

于 2013-08-15T18:43:41.417 に答える
1

最初の print ステートメントはリストを印刷しています。2番目のものは文字列を印刷しています。

于 2013-08-15T18:43:54.373 に答える
1

それがPythonの仕組みです。を使用print(movies)すると、リスト全体の文字列表現が出力moviesされます。

for fav_movie in movies:
      print(fav_movie)

アイテムを 1 つずつ印刷しますmovies

>>> l = [1, 2, 3]
>>> print(l)
[1, 2, 3]
>>> for i in l: print(i)
...
1
2
3
>>>
于 2013-08-15T18:43:55.340 に答える
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 により、すべての映画に独自のセリフが追加されます。

于 2013-08-15T19:13:49.470 に答える