有没有一种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循环。
发布于 2020-07-01 22:34:08
您可以将其分为两部分:计算的生成和结束条件的处理。
产生无限的计算序列是很简单的:
from itertools import count, takewhile
N = 32000
nums = (N // 2**l for l in count())其中,count与range类似,但未指定end。
要切断它,您可以将其与takewhile配对,并取消条件:
finite_nums = takewhile(lambda n: n % 2 == 0, nums)
>>> list(finite_nums)
[32000, 16000, 8000, 4000, 2000, 1000, 500, 250]发布于 2020-07-01 22:29:22
除了研究pythonic对你意味着什么,因为我认为我们每个人对pythonic都有自己的看法,你可以像这样简单地重写你的循环:
while not N // 2**l % 2 != 0:
my_list.append(N // 2**l)
l += 1或者你的意思是重写你的列表作为一种理解?
https://stackoverflow.com/questions/62679023
复制相似问题