W PHP mogę to zrobić:
echo '<pre>'
print_r($array);
echo '</pre>'
W Pythonie obecnie robię to:
print the_list
Spowoduje to jednak duży zbiór danych. Czy jest jakiś sposób, aby ładnie wydrukować to w czytelnym drzewie? (z wcięciami)?
from pprint import pprint
pprint(the_list)
import pprint
?pprint.pprint(the_list)
zwykle jest to kwestia osobistych preferencji. W tym przypadku zdecydowałem się na dodatkowy bałagan w wierszu importu.stream=
, domyślnie jest to stdout. docs.python.org/3/library/pprint.htmlSzybkim hackem podczas debugowania, który działa bez konieczności importowania,
pprint
byłoby dołączenie do listy'\n'
.>>> lst = ['foo', 'bar', 'spam', 'egg'] >>> print '\n'.join(lst) foo bar spam egg
źródło
None
.print '\n'.join(map(str, lst))
Wystarczy „rozpakować” listę w argumencie funkcji drukowania i użyć znaku nowej linii (\ n) jako separatora.
print (* lst, sep = '\ n')
lst = ['foo', 'bar', 'spam', 'egg'] print(*lst, sep='\n') foo bar spam egg
źródło
from __future__ import print_function
Dziękujemy za komentarz.Masz na myśli coś takiego ...:
>>> print L ['this', 'is', 'a', ['and', 'a', 'sublist', 'too'], 'list', 'including', 'many', 'words', 'in', 'it'] >>> import pprint >>> pprint.pprint(L) ['this', 'is', 'a', ['and', 'a', 'sublist', 'too'], 'list', 'including', 'many', 'words', 'in', 'it'] >>>
...? Z twojego pobieżnego opisu, pierwszą rzeczą, która przychodzi na myśl, jest moduł biblioteki standardowej pprint ; jeśli jednak potrafisz opisać przykładowe wejścia i wyjścia (żeby nie trzeba było uczyć się PHP, aby ci pomóc ;-), być może będziemy mogli zaoferować bardziej szczegółową pomoc!
źródło
import json some_list = ['one', 'two', 'three', 'four'] print(json.dumps(some_list, indent=4))
Wynik:
[ "one", "two", "three", "four" ]
źródło
https://docs.python.org/3/library/pprint.html
Jeśli potrzebujesz tekstu (na przykład do używania z przekleństwami):
import pprint myObject = [] myText = pprint.pformat(myObject)
Wtedy
myText
zmienna będzie podobna do phpvar_dump
lubprint_r
. Sprawdź dokumentację, aby uzyskać więcej opcji i argumentów.źródło
Jak sugerują inne odpowiedzi, moduł pprint załatwia sprawę .
Niemniej jednak, w przypadku debugowania, w którym może być konieczne umieszczenie całej listy w jakimś pliku dziennika, może być konieczne użycie metody pformat wraz z rejestrowaniem modułu wraz z pprintem.
import logging from pprint import pformat logger = logging.getLogger('newlogger') handler = logging.FileHandler('newlogger.log') formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.WARNING) data = [ (i, { '1':'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', }) for i in xrange(3) ] logger.error(pformat(data))
A jeśli chcesz zarejestrować go bezpośrednio w pliku, należałoby określić strumień wyjściowy za pomocą słowa kluczowego stream. Nr ref
from pprint import pprint with open('output.txt', 'wt') as out: pprint(myTree, stream=out)
Zobacz odpowiedź Stefano Sanfilippo
źródło
W przypadku Pythona 3 robię to samo, co odpowiedź shxfee :
def print_list(my_list): print('\n'.join(my_list)) a = ['foo', 'bar', 'baz'] print_list(a)
które wyjścia
Na marginesie, używam podobnej funkcji pomocniczej, aby szybko zobaczyć kolumny w pandach DataFrame
def print_cols(df): print('\n'.join(df.columns))
źródło
Jak wspomniały inne odpowiedzi,
pprint
jest to świetny moduł, który zrobi, co chcesz. Jeśli jednak nie chcesz go importować i po prostu chcesz wydrukować wynik debugowania podczas programowania, możesz przybliżyć jego wynik.Niektóre inne odpowiedzi działają dobrze w przypadku łańcuchów, ale jeśli wypróbujesz je z obiektem klasy, otrzymasz błąd
TypeError: sequence item 0: expected string, instance found
.W przypadku bardziej złożonych obiektów upewnij się, że klasa ma
__repr__
metodę, która drukuje żądane informacje o właściwościach:class Foo(object): def __init__(self, bar): self.bar = bar def __repr__(self): return "Foo - (%r)" % self.bar
A jeśli chcesz wydrukować wynik, po prostu zamapuj swoją listę na
str
funkcję taką:l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)] print "[%s]" % ",\n ".join(map(str,l))
wyjścia:
[Foo - (10), Foo - (20), Foo - ('A string'), Foo - (2.4)]
Możesz także zrobić takie rzeczy, jak nadpisanie
__repr__
metody,list
aby uzyskać formę zagnieżdżonego ładnego drukowania:class my_list(list): def __repr__(self): return "[%s]" % ",\n ".join(map(str, self)) a = my_list(["first", 2, my_list(["another", "list", "here"]), "last"]) print a
daje
[first, 2, [another, list, here], last]
Niestety nie ma wcięć drugiego poziomu, ale może być przydatne do szybkiego debugowania.
źródło
możesz również zapętlić swoją listę:
def fun(): for i in x: print(i) x = ["1",1,"a",8] fun()
źródło