Aș dori să știu dacă există o modalitate mai bună de a imprima toate obiectele dintr-o listă Python decât aceasta :
myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar
Am citit că acest mod nu este foarte bun :
myList = [Person("Foo"), Person("Bar")]
for p in myList:
print(p)
Nu există ceva de genul :
print(p) for p in myList
Dacă nu, întrebarea mea este... de ce ? Dacă putem face acest tip de lucruri cu liste complete, de ce nu ca o simplă declarație în afara unei liste ?
Presupunând că folosiți Python 3.x:
print(*myList, sep='\n')
Puteți obține același comportament pe Python 2.x folosind from __future__ import print_function
, așa cum a observat mgilson în comentarii.
Cu instrucțiunea print pe Python 2.x veți avea nevoie de un fel de iterație, în ceea ce privește întrebarea dvs. despre print(p) for p in myList
care nu funcționează, puteți folosi următoarele, care fac același lucru și sunt tot o singură linie:
for p in myList: print p
Pentru o soluție care folosește '\n'.join()
, prefer înțelegerile și generatoarele de liste în locul lui map()
, așa că aș folosi probabil următoarele:
print '\n'.join(str(p) for p in myList)
Pentru Python 2.*:
Dacă supraîncărcați funcția __str__() pentru clasa Persoană, puteți omite partea cu map(str, ...). O altă modalitate de a face acest lucru este crearea unei funcții, așa cum ați scris:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
Există în Python 3.* argumentul sep pentru funcția print(). Aruncați o privire la documentație.