[英]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.