Питонический способ печати элементов списка
Я хотел бы знать, есть ли лучший способ распечатать все объекты в списке 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
Если нет,то мой вопрос... зачем ? Если мы можем делать такие вещи с исчерпывающими списками, почему бы не в виде простого утверждения вне списка ?
7 ответов:
предполагая, что вы используете Python 3.x:
print(*myList, sep='\n')
вы можете получить такое же поведение на Python 2.x с помощью
from __future__ import print_function
, как отметил мгилсон в комментариях.с оператором печати на 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)
Для Python 2.*:
Если вы перегружаете функцию _ _ str__ () для вашего класса Person, вы можете опустить часть с map(str, ...). Другой способ для этого-создание функции, как вы и писали:
def write_list(lst): for item in lst: print str(item) ... write_list(MyList)
есть в Python 3.* аргумент sep для функции print (). Взгляните на документацию.
расширяя ответ @ lucasg (вдохновленный комментарием, который он получил):
и в формате вывод списка, вы можете сделать что-то в этом роде:
l = [1,2,5] print ", ".join('%02d'%x for x in l) 01, 02, 05
теперь
", "
обеспечивает разделитель (только между элементами, а не в конце) и строку форматирования'02d'
в сочетании с%x
дает форматированную строку для каждого элементаx
- в этом случае форматируется как целое число с двумя цифрами, слева-заполняется нулями.
для отображения каждого контента я использую:
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.')
надеюсь, что помогла.