I would like to know if there is a better way to print all objects in a Python list than this :
myList = [Person("Foo"), Person("Bar")] print("\n".join(map(str, myList))) Foo Bar I read this way is not really good :
myList = [Person("Foo"), Person("Bar")] for p in myList: print(p) Isn't there something like :
print(p) for p in myList If not, my question is... why ? If we can do this kind of stuff with comprehensive lists, why not as a simple statement outside a list ?
313 Answers
Assuming you are using Python 3.x:
print(*myList, sep='\n') You can get the same behavior on Python 2.x using from __future__ import print_function, as noted by mgilson in comments.
With the print statement on Python 2.x you will need iteration of some kind, regarding your question about print(p) for p in myList not working, you can just use the following which does the same thing and is still one line:
for p in myList: print p For a solution that uses '\n'.join(), I prefer list comprehensions and generators over map() so I would probably use the following:
print '\n'.join(str(p) for p in myList) 10I use this all the time :
#!/usr/bin/python l = [1,2,3,7] print "".join([str(x) for x in l]) 1[print(a) for a in list] will give a bunch of None types at the end though it prints out all the items
For Python 2.*:
If you overload the function __str__() for your Person class, you can omit the part with map(str, ...). Another way for this is creating a function, just like you wrote:
def write_list(lst): for item in lst: print str(item) ... write_list(MyList) There is in Python 3.* the argument sep for the print() function. Take a look at documentation.
Expanding @lucasg's answer (inspired by the comment it received):
To get a formatted list output, you can do something along these lines:
l = [1,2,5] print ", ".join('%02d'%x for x in l) 01, 02, 05 Now the ", " provides the separator (only between items, not at the end) and the formatting string '02d'combined with %x gives a formatted string for each item x - in this case, formatted as an integer with two digits, left-filled with zeros.
To display each content, I use:
mylist = ['foo', 'bar'] indexval = 0 for i in range(len(mylist)): print(mylist[indexval]) indexval += 1 Example of using in a function:
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.') Hope I helped.
1I think this is the most convenient if you just want to see the content in the list:
myList = ['foo', 'bar'] print('myList is %s' % str(myList)) Simple, easy to read and can be used together with format string.
I recently made a password generator and although I'm VERY NEW to python, I whipped this up as a way to display all items in a list (with small edits to fit your needs...
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) Like I said, IM VERY NEW to Python and I'm sure this is way to clunky for a expert, but I'm just here for another example
Assuming you are fine with your list being printed [1,2,3], then an easy way in Python3 is:
mylist=[1,2,3,'lorem','ipsum','dolor','sit','amet'] print(f"There are {len(mylist):d} items in this lorem list: {str(mylist):s}") Running this produces the following output:
There are 8 items in this lorem list: [1, 2, 3, 'lorem', 'ipsum', 'dolor', 'sit', 'amet']
OP's question is: does something like following exists, if not then why
print(p) for p in myList # doesn't work, OP's intuition answer is, it does exist which is:
[p for p in myList] #works perfectly Basically, use [] for list comprehension and get rid of print to avoiding printing None. To see why print prints None see this
To print each element of a given list using a single line code
for i in result: print(i) You can also make use of the len() function and identify the length of the list to print the elements as shown in the below example:
sample_list = ['Python', 'is', 'Easy'] for i in range(0, len(sample_list)): print(sample_list[i]) you can try doing this: this will also print it as a string
print(''.join([p for p in myList])) or if you want to a make it print a newline every time it prints something
print(''.join([p+'\n' for p in myList]))