簡體   English   中英

Pythonic 打印列表項的方法

[英]Pythonic way to print list items

我想知道是否有比這更好的方法來打印 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

如果不是,我的問題是……為什么? 如果我們可以用綜合列表來做這種事情,為什么不作為一個列表之外的簡單語句呢?

假設您使用的是 Python 3.x:

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

正如 mgilson 在評論中指出的那樣,您可以使用from __future__ import print_function在 Python 2.x 上獲得相同的行為。

使用 Python 2.x 上的 print 語句,您將需要某種迭代,關於您關於print(p) for p in myList不起作用的問題,您可以使用以下內容,它做同樣的事情並且仍然是一行:

for p in myList: print p

對於使用'\n'.join()的解決方案,我更喜歡列表推導和生成器而不是map()所以我可能會使用以下內容:

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

我經常用這個 :

#!/usr/bin/python

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

[print(a) for a in list]將在最后給出一堆 None 類型,盡管它會打印出所有項目

對於 Python 2.*:

如果為 Person 類重載函數 __str__(),則可以省略帶有 map(str, ...) 的部分。 另一種方法是創建一個函數,就像你寫的那樣:

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

...

write_list(MyList)

在 Python 3.* 中有 print() 函數的參數sep 看看文檔。

擴展@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.')

希望我有所幫助。

如果您只想查看列表中的內容,我認為這是最方便的:

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

簡單易讀,可與格式字符串一起使用。

我最近制作了一個密碼生成器,雖然我對 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)

就像我說的,我對 Python 非常陌生,我敢肯定這對專家來說很笨拙,但我只是在這里舉個例子

假設您可以打印列表 [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']

OP的問題是:是否存在類似以下的內容,如果不存在,那么為什么

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

答案是,它確實存在,即:

[p for p in myList] #works perfectly

基本上,使用[]進行列表理解並擺脫print以避免打印None 要了解為什么print打印None ,請參閱

使用單行代碼打印給定列表的每個元素

 for i in result: print(i)

您還可以使用 len() 函數並確定列表的長度以打印元素,如下例所示:

sample_list = ['Python', 'is', 'Easy']

for i in range(0, len(sample_list)):

      print(sample_list[i])

參考: https ://favtutor.com/blogs/print-list-python

您可以嘗試這樣做:這也會將其打印為字符串

print(''.join([p for p in myList]))

或者如果你想讓它每次打印一些東西時都打印一個換行符

print(''.join([p+'\n' for p in myList]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM