Pythonic способ распечатать элементы списка

Я хотел бы знать, есть ли лучший способ распечатать все объекты в списке Python, чем это:

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

Я читаю, что это не очень хорошо:

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

Не существует ли что-то вроде:

print(p) for p in myList

Если нет, мой вопрос... почему? Если мы можем делать такие вещи с исчерпывающими списками, почему бы не просто сделать выражение за пределами списка?

Ответ 1

Предполагая, что вы используете Python 3.x:

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

Вы можете получить то же поведение на Python 2.x, используя from __future__ import print_function, как отмечено в комментариях mgilson.

С выражением на печать на Python 2.x вам понадобится итерация, в связи с тем, что ваш вопрос о print(p) for p in myList не работает, вы можете просто использовать следующее, которое делает то же самое и остается одной строкой:

for p in myList: print p

Для решения, использующего '\n'.join(), я предпочитаю использование списков и генераторов над map(), поэтому я бы, вероятно, использовал следующее:

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

Ответ 2

Я использую это все время:

#!/usr/bin/python

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

Ответ 3

[print(a) for a in list] даст в конце набор типов None, хотя он выводит все элементы

Ответ 4

Для Python 2. *:

Если вы перегружаете функцию __str __() для своего класса Person, вы можете опустить часть с помощью карты (str,...). Другим способом для этого является создание функции, как вы писали:

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

...

write_list(MyList)

В Python 3. * аргумент sep для функции print(). Взгляните на документацию.

Ответ 5

Расширение ответа @lucasg (на основе полученного комментария):

Чтобы получить вывод отформатированного, вы можете сделать что-то в этих строках:

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

01, 02, 05

Теперь ", " предоставляет разделитель (только между элементами, а не в конце), а строка форматирования '02d' в сочетании с %x дает форматированную строку для каждого элемента x - в этом случае отформатирована как целое число с двумя цифрами, заполненное слева нулями.

Ответ 6

Чтобы отобразить каждый контент, я использую:

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

Пример использования в функции:

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

Надеюсь, я помог.

Ответ 7

Я думаю, что это наиболее удобно, если вы просто хотите увидеть содержимое в списке:

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

Простой, удобный для чтения и может использоваться вместе со строкой формата.

Ответ 8

Вопрос OP: существует ли что-то вроде следующего, если нет, то почему

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

ответ есть, он существует, который:

[p for p in myList] #works perfectly

В принципе, используйте [] для понимания списка и избавитесь от print чтобы избежать печати None. Чтобы узнать, почему print отпечатки None см. Это

Ответ 9

Недавно я создал генератор паролей, и хотя я ОЧЕНЬ НОВЫЙ для python, я взломал его как способ отображения всех элементов в списке (с небольшими изменениями в соответствии с вашими потребностями...

    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)

Как я уже сказал, IM ОЧЕНЬ НОВЫЙ для Python, и я уверен, что это способ неуклюже для эксперта, но я просто здесь для другого примера

Ответ 10

Предполагая, что вы в порядке с напечатанным списком [1,2,3], тогда простой способ в 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}")

Выполнение этого приводит к следующему результату:

В этом списке lorem есть 8 предметов: [1, 2, 3, 'lorem', 'ipsum', 'dolor', 'sit', 'amet']