簡體   English   中英

是否可以將for語句分配給python中的變量?

[英]Is it possible to assign a for statement to a variable in python?

我是 Python 的學生,有一項作業要求我在不使用 Pandas 的情況下編寫代碼。 我需要為一個變量分配一個打印語句,並且我想包含一個 for 循環,以便它是動態的。

現在,我已經對打印語句的數量進行了硬編碼,這對於賦值來說已經足夠了,但是我想知道是否有某種方法可以將 for 循環放入變量中以供將來參考。

我所做的(這很好用,因為我知道我需要多少打印語句):

x = (
    f"{names[i]} : {percent[i]}% ({votes[i]})"\n
    f"{names[i]} : {percent[i]}% ({votes[i]})"\n
    f"{names[i]} : {percent[i]}% ({votes[i]})"\n
)

print(x)

我可以做什么,以便我不需要提前知道范圍的結束:

for i in range(0,len(candidates)):
    print(f"{names[i]} : {percent[i]}% ({votes[i]})")

只要我不將它分配給變量,第二段代碼就可以很好地工作。 問題是我需要將它分配給一個變量。

當我這樣做時:

x = for i in range(0,len(candidates)):
        print(f"{names[i]} : {percent[i]}% ({votes[i]})")

print(x)

我得到:

語法錯誤:無效語法

指向表示 for i in range(0,len(candidates)) 的行:

我認為這意味着我不能將 for 循環分配給變量。 是否有解決方法可以讓我這樣做?

在循環之前為x分配一個空容器,然后在循環中而不是打印,而是每個字符串添加到容器中-循環結束時x將包含多個字符串。 如果您瀏覽文檔,則應該能夠找到合適的容器。

如果x應該是單個字符串:在循環之前為x分配一個空字符串,然后在循環中將x添加/串聯。

就像aaaakshat所說的,您可以將結果分配給列表。

一種方法是從for循環生成器中創建一個列表,然后將每個項目與換行符相連,如下所示。

x = '\\n'.join([f"{names[i]} : {percent[i]}% ({votes[i]})" for i in range(len(candidates))])

說明

我們要做的是通過循環遍歷介於0和candidates長度之間的所有數字來列出列表。 這是通過for i in range(len(candidates))部分完成的。

對於每一個,我們都會生成您的字符串( f"{names[i]} : {percent[i]}% ({votes[i]})" )。

通過將其放在方括號中,我們告訴python列出所有這些字符串。

然后,我們在每個項目之間放置一個換行符( '\\n' ),以將列表中的字符串連接'\\n'.join'\\n'.join )。

最后,我們將其分配給變量x

我認為您正在將循環結果分配給Python中的變量 因此,這個問題有很多方法可以解決。 但是,您要使用Python:將打印輸出分配給一個變量 看來您正在根據問題的語法尋找列表推導 這是Python官方文檔提到的有關List Comprehensions的內容

列表理解為創建列表提供了一種簡潔的方法。 常見的應用是創建新列表,其中每個元素是應用於另一個序列的每個成員或可迭代的某些操作的結果,或者創建滿足特定條件的那些元素的子序列。

這是“ 列表推導”的格式,只需忽略“ Predicate(Optional)部分。

在此處輸入圖片說明

因此,您的loop應以這種方式轉換,並將創建一個List Comprehensions

在此處輸入圖片說明

這將起作用,但是當您將print()語句分配給變量時,它將返回None值。 然后,您必須同意@EdWard的答案 他的回答還提到了它實際上是如何工作的以及如何適合您的問題。

還有一件事,你不需要在傳遞start值的range()用它啟動0 ,看到它提到什么文檔。

開始參數的值(如果未提供該參數,則為0)

所以,你可以簡單的使用range(len(candidates))沒有通過start值。 您可以同時使用兩種方式

>>> # this way ending without new line
>>> x = '\n'.join([f"{names[i]} : {percent[i]}% ({votes[i]})" for i in range(len(candidates))])
>>> x
'a : 1% (7)\nb : 2% (8)\nc : 3% (9)'
>>> print(x)
a : 1% (7)
b : 2% (8)
c : 3% (9)

>>>
>>> # this way ending with new line
>>> x = ''.join([f"{names[i]} : {percent[i]}% ({votes[i]})\n" for i in range(len(candidates))])
>>> x
'a : 1% (7)\nb : 2% (8)\nc : 3% (9)\n'
>>> print(x)
a : 1% (7)
b : 2% (8)
c : 3% (9)


>>>

您不能以這種方式使用for循環,但是可以使用稱為列表理解的方法,該方法可以將值分配給變量。

在您的情況下,您將創建一個變量來存儲類似的值,並使用新的行分隔符將其打印出來:

x = [(f"{names[i]} : {percent[i]}% ({votes[i]})") for i in range(len(candidates))]

print(*x, sep="\n")

# using print syntax
# '*' creates a space between the list items, 'sep' defines the separator

暫無
暫無

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

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