Pythonische manier om lijstitems af te drukken

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 myListdie 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 %xgeeft 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 printom het afdrukken van Nonete vermijden. Om te zien waarom printNoneafdrukt, zie dit


Antwoord 11

Elk element van een bepaalde lijst afdrukken met een enkele regelcode

for i in result: print(i)

Other episodes