it-swarm.com.de

Pythonische Art, Listenelemente zu drucken

Ich würde gerne wissen, ob es eine bessere Möglichkeit gibt, alle Objekte in einer Python-Liste als diese zu drucken:

myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar

Ich lese auf diese Weise nicht wirklich gut:

myList = [Person("Foo"), Person("Bar")]
for p in myList:
    print(p)

Gibt es nicht so etwas wie:

print(p) for p in myList

Wenn nicht, ist meine Frage ... warum? Wenn wir solche Sachen mit umfassenden Listen machen können, warum nicht als einfache Aussage außerhalb einer Liste?

87

Angenommen, Sie verwenden Python 3.x:

print(*myList, sep='\n')

Sie können dasselbe Verhalten für Python 2.x mit from __future__ import print_function erhalten, wie von mgilson in Kommentaren angegeben.

Mit der print-Anweisung auf Python 2.x benötigen Sie eine Art Iteration. In Bezug auf Ihre Frage, dass print(p) for p in myList nicht funktioniert, können Sie einfach Folgendes verwenden, das dasselbe tut und immer noch eine Zeile enthält:

for p in myList: print p

Für eine Lösung, die '\n'.join() verwendet, bevorzuge ich Listenauffassungen und Generatoren gegenüber map(). Daher würde ich wahrscheinlich Folgendes verwenden:

print '\n'.join(str(p) for p in myList) 
178
Andrew Clark

Ich benutze das die ganze Zeit: 

#!/usr/bin/python

l = [1,2,3,7] 
print "".join([str(x) for x in l])
24
lucasg

[print(a) for a in list] gibt am Ende eine Reihe von None-Typen aus, obwohl alle Elemente ausgedruckt werden

5
ytpillai

Für Python 2. *:

Wenn Sie die Funktion __str__ () für Ihre Person-Klasse überladen, können Sie den Teil mit map (str, ...) weglassen. Eine andere Möglichkeit hierfür ist das Erstellen einer Funktion, genau wie Sie geschrieben haben:

def write_list(lst):
    for item in lst:
        print str(item) 

...

write_list(MyList)

In Python 3 gibt es das Argument sep für die Funktion print (). Sehen Sie sich die Dokumentation an.

3
gukoff

Die Antwort von @ lucasg erweitern (inspiriert durch den Kommentar):

Um eineformatiertelist-Ausgabe zu erhalten, können Sie folgende Schritte ausführen:

l = [1,2,5]
print ", ".join('%02d'%x for x in l)

01, 02, 05

Jetzt gibt ", " das Trennzeichen (nur zwischen Elementen, nicht am Ende) und die Formatierungszeichenfolge '02d'kombiniert mit %x eine formatierte Zeichenfolge für jedes Element x - in diesem Fall als Ganzzahl mit zwei Ziffern, die mit Nullen gefüllt sind, formatiert.

3
Floris

Um jeden Inhalt anzuzeigen, verwende ich:

mylist = ['foo', 'bar']
indexval = 0
for i in range(len(mylist)):     
    print(mylist[indexval])
    indexval += 1

Beispiel für die Verwendung in einer Funktion:

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.')

Hoffe ich habe geholfen.

2
ShinyMemes

Ich denke, das ist am bequemsten, wenn Sie nur den Inhalt in der Liste sehen möchten:

myList = ['foo', 'bar']
print('myList is %s' % str(myList))

Einfach, leicht lesbar und kann zusammen mit der Formatzeichenfolge verwendet werden.

1
Rongzhao Zhang

Die Frage von OP lautet: Gibt es so etwas wie Folgendes, wenn nicht, warum

print(p) for p in myList # doesn't work, OP's intuition

antwort ist, es ist existiert nicht was ist:

[p for p in myList] #works perfectly

Verwenden Sie [] für das Verständnis der Liste. Entfernen Sie print, um das Drucken von None zu vermeiden. Um herauszufinden, warum printNone druckt, sehen Sie this

1
Gaurav Singhal

Ich habe vor kurzem einen Passwortgenerator erstellt, und obwohl ich für Python SEHR NEU bin, habe ich dies als eine Möglichkeit herausgestellt, alle Elemente in einer Liste anzuzeigen (mit kleinen Änderungen, die auf Ihre Bedürfnisse zugeschnitten sind ...

    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)

Wie ich schon sagte, IM SEHR NEU in Python und ich bin sicher, dass dies für einen Experten zu klobig ist, aber ich bin nur für ein anderes Beispiel hier

1
Nate Baker

Angenommen, Sie sind zufrieden mit dem Ausdruck Ihrer Liste [1,2,3], dann ist ein einfacher Weg 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}")

Wenn Sie dies ausführen, wird folgende Ausgabe erzeugt:

Es gibt 8 Elemente in dieser Lorem-Liste: [1, 2, 3, 'Lorem', 'ipsum', 'Dolor', 'sitzen', 'amet']

0
Aethalides