Pythonで別々の行にリスト要素を印刷する


84

これを使用してPythonパスフォルダーを印刷しようとしています:

import sys
print sys.path

出力は次のようになります。

>>> print sys.path
['.', '/usr/bin', '/home/student/Desktop', '/home/student/my_modules', '/usr/lib/pyth
on2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/pyth
on2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-pack
ages', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/
usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/
python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/p
ython2.6/dist-packages/wx-2.8-gtk2-unicode']

それらを正しく解析できるように、それらを別々の行に印刷するにはどうすればよいですか?

次のようになります。

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc

1
なぜそれらを解析する必要があるのですか。彼らはすでにリストではありませんか?
singleNegationElimination

回答:


170
print("\n".join(sys.path))

(外側の括弧はPython 3との互換性のために含まれており、通常Python 2では省略されています。)


1
私は知っています、そのサイズのリストには関係ありませんが、forループ内で印刷するだけで、メモリの消費量が少なくなり、これよりも少し単純になります。
utdemir

forループでどのように実行しますか?
ラリー

2
@ラリー:for line in sys.path: print line
カトリエル

4
py3:f = lambda *x: null; f( *( print( x ) for x in sys.path ) )-冗談です...
フロー

57

印刷関数(Python 3.x)を使用するか、インポート(Python 2.6以降)します。

from __future__ import print_function

print(*sys.path, sep='\n')

6
この答えは、文字列以外の要素を含むリストを印刷する場合に最適です。
BallpointBen

17

この種のオプションを処理するためのもう1つの優れたオプションは、pprintモジュールです。これは、(とりわけ)1行に1つの要素を持つ長いリストをきれいに出力します。

>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
 '/usr/lib/python27.zip',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7/site-packages',
 '/usr/lib/python2.7/site-packages/PIL',
 '/usr/lib/python2.7/site-packages/gst-0.10',
 '/usr/lib/python2.7/site-packages/gtk-2.0',
 '/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info',
 '/usr/lib/python2.7/site-packages/webkit-1.0']
>>> 

4
の場合a = [1,3,5]、その行はこの配列を1行でのみ印刷します...pprint別の行に印刷する保証された方法はありますか?
非極性2016

1
@太極者無極而生pprint.pprint(x,width=max([len(str(s)) for s in x])+3)
TTB


8

Sven Marnachの答えはほぼそれですが、一般的な問題が1つあります...印刷されるリストに文字列だけが含まれていない場合は失敗します。

したがって、「改行で区切られた要素を含むリストを印刷する方法」に対するより一般的な答え...

print '\n'.join([ str(myelement) for myelement in mylist ])

繰り返しになりますが、JBernardoが指摘する印刷機能アプローチは優れています。可能であれば、printステートメントの代わりにprint関数を使用することをお勧めします。


1
ジェネレータ式を使用できるリスト内包表記の使用は避けてください。ここでは間違いなく使用できます。この答えを見てください。あなたは次のように、その答えに、より便利なリンクを取得します。この1
Sнаđошƒаӽ

1
この場合は当てはまりませんSнаđошƒаӽ@、参照stackoverflow.com/a/37782238/5320906
snakecharmerb

@snakecharmerb知っておくといいですね。共有してくれてありがとう!
Sнаđошƒаӽ

1

スプラット演算子(*)を使用します

デフォルトでは、*演算子はスペースで区切られたリストを出力します。sep演算子を使用して区切り文字を指定します

print(*sys.path, sep = "\n")

1
これは、それを行うための新しくて賢い方法です!紛らわしく冗長なラムダmap / joinsを使用するよりもはるかに優れています。「感嘆符」はここでよりよく説明されています
not2qubit

0

sys.pathはパスのリストを返します

ref

sys.path

モジュールの検索パスを指定する文字列のリスト。環境変数PYTHONPATHから初期化され、さらにインストールに依存するデフォルト。

プログラムの起動時に初期化されると、このリストの最初の項目であるpath [0]は、Pythonインタープリターを呼び出すために使用されたスクリプトを含むディレクトリです。スクリプトディレクトリが利用できない場合(たとえば、インタプリタがインタラクティブに呼び出される場合、またはスクリプトが標準入力から読み取られる場合)、path [0]は空の文字列であり、Pythonに現在のディレクトリ内のモジュールを最初に検索するように指示します。PYTHONPATHの結果として挿入されるエントリの前に、スクリプトディレクトリが挿入されることに注意してください。

import sys
dirs=sys.path
for path in dirs:
   print(path)

または、最初のパスのみを印刷できます

print(dir[0])

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.