ここで実際に驚いたことは、単一の文字列を出力することは、文字列のリストを出力することと同じことをしないということです。これは、Unicode であるかどうかに関係なく当てはまります。
>>> hobby1 = u'Dizziness'
>>> hobby2 = u'Vértigo'
>>> hobbies = [hobby1, hobby2]
>>> print hobby1
Dizziness
>>> print hobbies
[u'Dizziness', u'V\xe9rtigo']
がなくてもu、バックスラッシュのエスケープは言うまでもなく、これらの余分な引用符があります。strまた、文字列の代わりにバイト文字列で同じことを試みるとunicode、引用符とエスケープが残ります (さらに、ソース ファイルと端末のエンコーディングが異なる場合は文字化け文字が含まれる可能性がありますが、その部分は忘れてください)。
Python では、すべてのオブジェクトが 2 つの異なる表現を持つことができます: エンド ユーザーにわかりやすい表現strと、プログラマーにわかりやすい表現 ですrepr。バイト文字列の場合、これらの表現はそれぞれPaintingと'Painting'です。Unicode 文字列の場合はPainting、 とu'Painting'.
printステートメントは を使用するためstr、引用符なしで をprint hobby1出力しPaintingます ( uUnicode の場合は )。
ただし、strリストの は、reprではなく、その各要素の を使用しstrます。したがって、 を印刷するhobbiesと、各要素は引用符で囲まれます ( uUnicode の場合は a)。
最初は奇妙に思えるかもしれませんが、これは意図的な設計上の決定であり、慣れれば理にかなっています。[foo, bar, baz]3 つの文字列のリストですか、それとも 2 つの文字列のリストで、そのうちの 1 つが途中にコンマを持っているのでしょうか? しかし、もっと重要なことに、リストは、どのように印刷しても、ユーザーフレンドリーなものではありません。My hobbies are [Painting, Stargazing]と同じくらい醜く見えますMy hobbies are ['Painting', 'Stargazing']。エンドユーザーにリストを表示したいときは、常に何らかの意味のある方法で明示的にフォーマットする必要があります。
多くの場合、必要なものは次のように単純です。
>>> print 'Hobbies:', ', '.join(hobbies)
Hobbies: Painting, Stargazing
または、Unicode 文字列の場合:
>>> print u'Hobbies:', u', '.join(hobbies)
Hobbies: Painting, Stargazing