2024-03-28 11:32:31 发布
网友
这是我的密码
for i in range(1,5): print(i for x in range(1,i+1))
对于此代码,输出为
<generator object at 0x0000025B9C7A9BA0> <generator object at 0x0000025B9C7A9BA0> <generator object at 0x0000025B9C7A9BA0> <generator object at 0x0000025B9C7A9BA0>
当你写作时
i for x in range(1,i+1)
这是一个“生成器表达式”,它产生一个“生成器”(<generator object at ...>),它是一个“iterable”。列表也是不可编辑的。生成器的优点是,当您对元素表达式进行迭代时,它实际上只对其求值(此处i)
<generator object at ...>
i
不过,你似乎想要一份实际的清单。您可以立即创建如下列表:
[i for x in range(1,i+1)]
或者在您的代码中:
for i in range(1,5): print([i for x in range(1,i+1)])
表达式[... for ... in ...]是一个“列表理解”。它看起来类似于生成器表达式,但它直接创建列表,而不使用生成器。列表理解首先出现在Python中,然后是生成器表达式。它们在不同的大括号中具有相同的语法
[... for ... in ...]
如果您已经有了生成器,还可以将其转换为列表:
for i in range(1,5): gen = (i for x in range(1,i+1)) print(list(gen)) # get all the elements and make a list
然后,该生成器“用完了”,没有更多的元素可以提供
您需要创建list
list
试试这个:
简而言之,您可以尝试以下方法:
print([i for i in range(1,5) for x in range(1,i+1)])
或
list(map((lambda x : print([x for _ in range(1,x+1)])), range(1,5)))
或者感谢@Sujay让您跑得更快,您可以使用tuple如下所示:
tuple
tuple(map((lambda x : print([x for _ in range(1,x+1)])), range(1,5)))
对于检查运行时,我使用以下代码:
%timeit tuple(map((lambda x : print([x for _ in range(1,x+1)])), range(1,5))) # 794 µs ± 86.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) %timeit list(map((lambda x : print([x for _ in range(1,x+1)])), range(1,5))) # 806 µs ± 150 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
当你写作时
这是一个“生成器表达式”,它产生一个“生成器”(
<generator object at ...>
),它是一个“iterable”。列表也是不可编辑的。生成器的优点是,当您对元素表达式进行迭代时,它实际上只对其求值(此处i
)不过,你似乎想要一份实际的清单。您可以立即创建如下列表:
或者在您的代码中:
表达式
[... for ... in ...]
是一个“列表理解”。它看起来类似于生成器表达式,但它直接创建列表,而不使用生成器。列表理解首先出现在Python中,然后是生成器表达式。它们在不同的大括号中具有相同的语法如果您已经有了生成器,还可以将其转换为列表:
然后,该生成器“用完了”,没有更多的元素可以提供
您需要创建
list
试试这个:
简而言之,您可以尝试以下方法:
或
或者感谢@Sujay让您跑得更快,您可以使用
tuple
如下所示:对于检查运行时,我使用以下代码:
相关问题 更多 >
编程相关推荐