所以我試圖使用串列理解來列印,我想在迭代中單獨列印每個元素。有問題的代碼:
str1 = "You don't know how amazing it is to learn how to program!"
list1 = str1.split(" ")
print(i.upper() for i in list1 if len(i) > 5)
但是當我嘗試運行代碼時,它會吐出:
<generator object <genexpr> at 0x000001F4212233C0>
所需的輸出將是:
AMAZING
PROGRAM!
除了使用普通的 for 回圈之外,我可以在這里做什么來僅使用 print() 函式內的一行代碼來實作我想要的?
uj5u.com熱心網友回復:
您可以將生成器運算式放入其中join()以單獨在一行上列印每個專案:
print("\n".join(i.upper() for i in list1 if len(i) > 5))
產生所需的輸出:
AMAZING
PROGRAM!
uj5u.com熱心網友回復:
表格
(i.upper() for i in list1 if len(i) > 5)
是一個生成器運算式 (a genexpr)。它在迭代之前不會有值,并且print()不會自己迭代物件。(它只是從它們中<generator object <genexpr>>生成字串,并且是生成器運算式的字串形式。
為了解決這個問題,你有幾個選擇(除了使用串列理解):
- 使用
"\n".join()上genexpr,使其通過加入新行的字串:print("\n".join(i.upper() for i in list1 if len(i) > 5)) - 您可以
print使用*運算子將生成器運算式放入引數中,并告訴print用換行符分隔值:print(*(i.upper() for i in list1 if len(i) > 5), sep="\n")
uj5u.com熱心網友回復:
列印陳述句中的代碼將只回傳一個生成器。如果您想獲得所需的輸出,請嘗試執行
print([i.upper() for i in list1 if len(i) > 5])
或者
[print(i.upper()) for i in list1 if len(i) > 5]
uj5u.com熱心網友回復:
您可以嘗試在陣列中獲取輸出
str1 = "You don't know how amazing it is to learn how to program!"
list1 = str1.split(" ")
print([i.upper() for i in list1 if len(i) > 5])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337985.html
