簡體   English   中英

將列表理解轉換為 while 循環

[英]Turn list comprehension to while loop

我有以下代碼行:

mass_grouped3['records_to_select'] = [math.ceil(int((el * target) / freq_sum)) if el > 6 else el for el in mass_grouped3['freq']]

我想用 while 循環重寫它,但對 while 循環沒有太多經驗,覺得很難。 這是我現在所擁有的,但由於某種原因無法正常工作:

trgt = 0
while trgt <= 7500:
    if trgt == 7500:
        break
    else:
        for el in mass_grouped3['freq']:
            if el > 6:
                mass_grouped3['records_to_select'] = [math.ceil(int((el * target) / freq_sum))]
                trgt += 1
            else:
                pass

我也想做同樣的事,但是當櫃台打到7500就破了。

您可以做的一件事就是用 while 循環包裝列表理解,這應該有助於避免長度問題。 我不確定target是否應該是您在trgt math.ceil(int((el * trgt) / freq_sum))中發布的第二個代碼塊中的 trgt,所以請告訴我,我會根據需要對其進行編輯。

trgt = 0
while trgt < 7500:
    mass_grouped3['records_to_select'] = [math.ceil(int((el * trgt) / freq_sum)) 
                                              if el > 6 else el for el 
                                              in mass_grouped3['freq']]
    trgt += 1

更一般地回答:一般來說,表格的列表理解

result = [foo(a) for a in as if condition]

可以寫為形式的 for 循環

result = []
for a in as:
    if condition:
        result.append(foo(a))

並且通常 for 循環可以重寫為 while 循環,盡管確切的轉換將取決於 for 循環的形式和您循環的結構。 如果你正在循環一個像列表這樣的序列索引集合,你通常可以這樣做:

result = []
ix = 0
end = len(as)
while ix < end:
    if condition:
        result.append(foo(as[ix]))

並期望得到與原始理解相同的結果。

注意:我必須通過 go 的體操以及為了進行這些重寫而必須提出的問題,這可以作為在可能時使用列表推導的一個很好的論據,並在它們可能的情況下提供一個很好的指南。

暫無
暫無

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

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