Python'da liste öğelerini ayrılmış satırlara yazdırma


87

Bunu kullanarak Python yol klasörlerini yazdırmaya çalışıyorum:

import sys
print sys.path

Çıktı şu şekildedir:

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

Bunları düzgün bir şekilde ayrıştırabilmek için ayrı satırlara nasıl yazdırırım?

Şöyle olmalı:

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

1
neden onları ayrıştırmanız gerekiyor? zaten bir liste değiller mi?
SingleNegationElimination

Yanıtlar:


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

(Dış parantezler Python 3 uyumluluğu için dahil edilmiştir ve genellikle Python 2'de çıkarılmıştır.)


1
Biliyorum, bu büyüklükteki liste için önemli değil, ancak sadece bir for döngüsü içinde yazdırmak daha az bellek tüketiyor ve bundan biraz daha basit.
utdemir

Bunu bir for döngüsünde nasıl yaparsınız?
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 ) )- sadece şaka yapıyorum ...
akış

60

Yazdırma işlevini (Python 3.x) kullanın veya içe aktarın (Python 2.6+):

from __future__ import print_function

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

6
Bu yanıt, dize olmayan öğeler içeren bir liste yazdırırken en iyisidir.
BallpointBen

19

Bu tür bir seçeneği işlemek için başka bir iyi seçenek pprint, (diğer şeylerin yanı sıra) her satırda bir öğe ile oldukça uzun listeler basan modüldür:

>>> 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
eğer a = [1,3,5], o zaman bu satır bu diziyi yalnızca bir satırda pprintyazdıracaksa ... onu ayrı satırlara yazdırmanın garantili bir yolu var mı?
nonopolarity

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


8

Sven Marnach'ın cevabı aşağı yukarı doğru, ancak bir genel sorunu var ... Yazdırılan liste sadece dizeler içermiyorsa başarısız olacaktır.

Dolayısıyla, "Yeni satırlarla ayrılmış öğeler içeren bir liste nasıl yazdırılır" sorusunun daha genel yanıtı ...

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

Sonra tekrar, JBernardo'nun işaret ettiği yazdırma işlevi yaklaşımı daha üstün. Yapabiliyorsanız, print ifadesi yerine print işlevini kullanmak neredeyse her zaman iyi bir fikirdir.


1
Oluşturucu ifadenin kullanılabileceği yerlerde liste anlamayı kullanmaktan kaçınmalısınız ve kesinlikle burada kullanabilirsiniz. Bu cevaba bir göz atın . Sen gibi, bu cevap daha yararlı linkler alacak bu bir
Sнаđошƒаӽ

1
@ Sнаđошƒаӽ bu durumda doğru değil, bkz. Stackoverflow.com/a/37782238/5320906
snakecharmerb

@snakecharmerb bilmek güzel. Paylaştığınız için çok teşekkürler!
Sнаđошƒаӽ

2

Uyarlama operatörünü (*) kullanın

Varsayılan olarak, * operatörü boşlukla ayrılmış listeyi yazdırır. sepSınırlayıcıyı belirtmek için operatörü kullanın

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

1
Bunu yapmanın yeni ve akıllı yolu bu! Kafa karıştırıcı ve ayrıntılı lambdaları veya harita / birleştirmeleri kullanmaktan çok daha iyi . "Sıçrama" burada daha iyi açıklanmıştır .
not2qubit

0

sys.path, yolların listesini döndürür

ref

sys.path

Modüller için arama yolunu belirten dizelerin listesi. PYTHONPATH ortam değişkeninden ve ayrıca kuruluma bağlı bir varsayılan değerden başlatılmıştır .

Program başlangıcında başlatıldığı gibi, bu listenin ilk öğesi olan yol [0], Python yorumlayıcısını çağırmak için kullanılan betiği içeren dizindir. Komut dosyası dizini mevcut değilse (örneğin, yorumlayıcı etkileşimli olarak çağrılırsa veya komut dosyası standart girişten okunursa), yol [0], Python'u ilk önce geçerli dizindeki modülleri aramaya yönlendiren boş dizedir. PYTHONPATH sonucunda eklenen girişlerden önce komut dizininin eklendiğine dikkat edin .

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

veya yalnızca ilk yolu yazdırabilirsiniz.

print(dir[0])

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.