Ik zou graag willen weten of er een betere manier is om alle objecten in een Python-lijst af te drukken dan deze:
myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar
Ik lees op deze manier is niet echt goed :
myList = [Person("Foo"), Person("Bar")]
for p in myList:
print(p)
Is er niet zoiets als:
print(p) for p in myList
Zo niet, dan is mijn vraag… waarom? Als we dit soort dingen kunnen doen met uitgebreide lijsten, waarom niet als een eenvoudige verklaring buiten een lijst?
Antwoord 1, autoriteit 100%
Ervan uitgaande dat u Python 3.x gebruikt:
print(*myList, sep='\n')
Je kunt hetzelfde gedrag krijgen op Python 2.x met behulp van from __future__ import print_function
, zoals opgemerkt door mgilson in opmerkingen.
Met de print-instructie op Python 2.x heb je een soort iteratie nodig, met betrekking tot je vraag over print(p) for p in myList
die niet werkt, kun je gewoon het volgende gebruiken, wat wel hetzelfde en is nog steeds één regel:
for p in myList: print p
Voor een oplossing die '\n'.join()
gebruikt, geef ik de voorkeur aan lijstbegrippen en generatoren boven map()
, dus ik zou waarschijnlijk het volgende gebruiken:
print '\n'.join(str(p) for p in myList)
Antwoord 2, autoriteit 12%
Ik gebruik dit altijd:
#!/usr/bin/python
l = [1,2,3,7]
print "".join([str(x) for x in l])
Antwoord 3, autoriteit 4%
[print(a) for a in list]
geeft aan het eind een aantal None-types, hoewel het alle items afdrukt
Antwoord 4
Voor Python 2.*:
Als je de functie __str__() voor je Person class overbelast, kun je het gedeelte met map(str, …) weglaten. Een andere manier hiervoor is het creëren van een functie, zoals je schreef:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
Er is in Python 3.* het argument sepvoor de print() functie. Bekijk de documentatie.
Antwoord 5
Uitbreiding van het antwoord van @lucasg (geïnspireerd door de opmerking die het kreeg):
Om een geformatteerdelijstuitvoer te krijgen, kunt u iets in de trant van het volgende doen:
l = [1,2,5]
print ", ".join('%02d'%x for x in l)
01, 02, 05
Nu biedt de ", "
het scheidingsteken (alleen tussen items, niet aan het einde) en de opmaakreeks '02d'
in combinatie met %x
geeft een opgemaakte tekenreeks voor elk item x
– in dit geval opgemaakt als een geheel getal met twee cijfers, links gevuld met nullen.
Antwoord 6
Om elke inhoud weer te geven, gebruik ik:
mylist = ['foo', 'bar']
indexval = 0
for i in range(len(mylist)):
print(mylist[indexval])
indexval += 1
Voorbeeld van gebruik in een functie:
def showAll(listname, startat):
indexval = startat
try:
for i in range(len(mylist)):
print(mylist[indexval])
indexval = indexval + 1
except IndexError:
print('That index value you gave is out of range.')
Ik hoop dat ik heb geholpen.
Antwoord 7
Ik denk dat dit het handigst is als je alleen de inhoud in de lijst wilt zien:
myList = ['foo', 'bar']
print('myList is %s' % str(myList))
Eenvoudig, gemakkelijk te lezen en kan samen met een opmaakstring worden gebruikt.
Antwoord 8
Ik heb onlangs een wachtwoordgenerator gemaakt en hoewel ik HEEL NIEUW ben met python, heb ik dit bedacht als een manier om alle items in een lijst weer te geven (met kleine bewerkingen om aan je behoeften te voldoen…
x = 0
up = 0
passwordText = ""
password = []
userInput = int(input("Enter how many characters you want your password to be: "))
print("\n\n\n") # spacing
while x <= (userInput - 1): #loops as many times as the user inputs above
password.extend([choice(groups.characters)]) #adds random character from groups file that has all lower/uppercase letters and all numbers
x = x+1 #adds 1 to x w/o using x ++1 as I get many errors w/ that
passwordText = passwordText + password[up]
up = up+1 # same as x increase
print(passwordText)
Zoals ik al zei, IK BEN HEEL NIEUW in Python en ik weet zeker dat dit veel te onhandig is voor een expert, maar ik ben hier alleen voor een ander voorbeeld
Antwoord 9
Ervan uitgaande dat je het goed vindt dat je lijst wordt afgedrukt [1,2,3], dan is een gemakkelijke manier in Python3:
mylist=[1,2,3,'lorem','ipsum','dolor','sit','amet']
print(f"There are {len(mylist):d} items in this lorem list: {str(mylist):s}")
Als u dit uitvoert, krijgt u de volgende uitvoer:
Er zijn 8 items in deze lorem-lijst: [1, 2, 3, ‘lorem’, ‘ipsum’,
‘dolor’, ‘zit’, ‘amet’]
Antwoord 10
OP’s vraag is: bestaat zoiets als het volgende, zo niet waarom
print(p) for p in myList # doesn't work, OP's intuition
het antwoord is, het bestaaten dat is:
[p for p in myList] #works perfectly
Kortom, gebruik []
voor het begrijpen van de lijst en verwijder print
om het afdrukken van None
te vermijden. Om te zien waarom print
None
afdrukt, zie dit
Antwoord 11
Elk element van een bepaalde lijst afdrukken met een enkele regelcode
for i in result: print(i)