[英]Pythonic way to construct a list
是否有一種 Pythonic 方式來構建以下列表(或類似列表):
N = 32000
my_list = []
l = 0
while N // 2**l % 2 == 0:
my_list.append(N // 2**l)
l += 1
據我所知,沒有辦法打破通常的列表構造語法[i for i in range(10)]
,也沒有辦法指定一個開放式的 for 循環。
您可以將其分為兩部分:計算的產生和結束條件的處理。
產生無限的計算序列很簡單:
from itertools import count, takewhile
N = 32000
nums = (N // 2**l for l in count())
其中count
類似於range
,但沒有指定結束。
要切斷它,您可以將其與takewhile
,並否定條件:
finite_nums = takewhile(lambda n: n % 2 == 0, nums)
>>> list(finite_nums)
[32000, 16000, 8000, 4000, 2000, 1000, 500, 250]
除了研究 pythonic 可能對您意味着什么,因為我認為我們每個人對 pythonic 是什么都有自己的看法,您可以像這樣簡單地重寫您的循環:
while not N // 2**l % 2 != 0:
my_list.append(N // 2**l)
l += 1
或者你的意思是重寫你的列表作為理解?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.