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']