簡體   English   中英

Pythonic 構造列表的方法

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

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