In các phần tử danh sách trên các dòng riêng biệt bằng Python


84

Tôi đang cố gắng in ra các thư mục đường dẫn Python bằng cách sử dụng:

import sys
print sys.path

Đầu ra như thế này:

>>> 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']

Làm cách nào để in chúng thành các dòng riêng biệt để có thể phân tích cú pháp đúng cách?

Nó sẽ như thế này:

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

1
tại sao bạn cần phân tích cú pháp chúng. không phải họ đã là một danh sách?
SingleNegationElimination

Câu trả lời:


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

(Các dấu ngoặc đơn bên ngoài được bao gồm để tương thích với Python 3 và thường bị bỏ qua trong Python 2.)


1
Tôi biết, nó không quan trọng đối với danh sách có kích thước đó, nhưng chỉ cần in bên trong vòng lặp for sẽ tiêu tốn ít bộ nhớ hơn và hơi đơn giản hơn thế này.
utdemir

Bạn sẽ làm như thế nào trong vòng lặp for?
Larry

2
@Larry:for line in sys.path: print line
Katriel

4
py3: f = lambda *x: null; f( *( print( x ) for x in sys.path ) )- chỉ nói đùa thôi ...
flow

57

Sử dụng hàm in (Python 3.x) hoặc nhập nó (Python 2.6+):

from __future__ import print_function

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

6
Câu trả lời này là tốt nhất khi in danh sách có chứa các phần tử không phải là chuỗi.
BallpointBen

17

Một tùy chọn tốt khác để xử lý loại tùy chọn này là pprintmô-đun, (trong số những thứ khác) in khá nhiều danh sách dài với một phần tử trên mỗi dòng:

>>> 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
nếu a = [1,3,5], thì dòng đó sẽ chỉ in mảng này trong một dòng ... có cách nào đảm bảo pprintđể in nó trên các dòng riêng biệt không?
nonopolarity

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


8

Câu trả lời của Sven Marnach là khá nhiều, nhưng có một vấn đề tổng quát ... Nó sẽ thất bại nếu danh sách đang được in ra không chỉ chứa các chuỗi.

Vì vậy, câu trả lời tổng quát hơn cho "Cách in ra danh sách với các phần tử được phân tách bằng các dòng mới" ...

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

Sau đó, một lần nữa, cách tiếp cận chức năng in mà JBernardo chỉ ra là ưu việt hơn. Nếu bạn có thể, sử dụng chức năng in thay vì câu lệnh in hầu như luôn luôn là một ý kiến ​​hay.


1
Bạn nên tránh sử dụng tính năng hiểu danh sách trong đó biểu thức trình tạo có thể được sử dụng và bạn chắc chắn có thể sử dụng biểu thức này ở đây. Hãy xem câu trả lời này . Bạn sẽ nhận được nhiều liên kết hữu ích hơn trong câu trả lời đó, như câu trả lời này
Sнаđошƒаӽ

1
@ Sнаđошƒаӽ không đúng trong trường hợp này, hãy xem stackoverflow.com/a/37782238/5320906
snakecharmerb

@snakecharmerb thật tốt khi biết. Cảm ơn rất nhiều vì đã chia sẻ!
Sнаđошƒаӽ

1

Sử dụng toán tử biểu tượng (*)

Theo mặc định, toán tử * in danh sách được phân tách bằng dấu cách. Sử dụng septoán tử để chỉ định dấu phân cách

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

1
Đây là cách mới và thông minh để làm điều đó! Tốt hơn nhiều so với việc sử dụng lambda dài dòng và khó hiểu hoặc bản đồ / nối . "Splat" được giải thích rõ hơn ở đây .
not2qubit

0

sys.path trả về danh sách các đường dẫn

ref

sys.path

Danh sách các chuỗi chỉ định đường dẫn tìm kiếm cho các mô-đun. Được khởi tạo từ biến môi trường PYTHONPATH , cộng với giá trị mặc định phụ thuộc vào cài đặt.

Khi được khởi tạo khi khởi động chương trình, mục đầu tiên của danh sách này, đường dẫn [0], là thư mục chứa tập lệnh được sử dụng để gọi trình thông dịch Python. Nếu thư mục tập lệnh không có sẵn (ví dụ: nếu trình thông dịch được gọi tương tác hoặc nếu tập lệnh được đọc từ đầu vào chuẩn), đường dẫn [0] là chuỗi trống, hướng Python đến tìm kiếm mô-đun trong thư mục hiện tại trước tiên. Lưu ý rằng thư mục tập lệnh được chèn trước khi các mục nhập được chèn do PYTHONPATH .

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

hoặc bạn chỉ có thể in đường dẫn đầu tiên bằng cách

print(dir[0])

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.