Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可以在列表理解时生成数据_Python - Fatal编程技术网

Python 可以在列表理解时生成数据

Python 可以在列表理解时生成数据,python,Python,仅仅使用while语句就可以用列表理解填充列表吗 列出理解力,包括: r = [i for i in range(0,5)] i=0 print [i+=1 while i<5] r=[0,1,2,3,4] 有可能用一段时间来构建它吗 原型: r = [i for i in range(0,5)] i=0 print [i+=1 while i<5] i=0 打印[i+=1,而i在列表理解中,您不能准确地执行您想要的操作,但由于您希望在某些项目满足条件时生成它们,因此最好

仅仅使用while语句就可以用列表理解填充列表吗

列出理解力,包括:

r =  [i for i in range(0,5)]
i=0
print [i+=1 while i<5]
r=[0,1,2,3,4]

有可能用一段时间来构建它吗

原型:

r =  [i for i in range(0,5)]
i=0
print [i+=1 while i<5]
i=0

打印[i+=1,而i在列表理解中,您不能准确地执行您想要的操作,但由于您希望在某些项目满足条件时生成它们,因此最好根据您想要的内容(根据需要生成项目)创建一个生成器,然后使用
itertools.takewhile
对生成器进行过滤

>>> from itertools import takewhile
>>> list(takewhile(lambda x:x<5,range(5))) #in python 2.X pass an Xrange  
[0, 1, 2, 3, 4]
>>从itertools导入

>>>列表(takewhile)(lambda x:x您已经在正确的轨道上了。这很好:

print [i for i in range(5)]
您可能还喜欢“一次性”变量,即下划线:

print [_ for _ in range(5)]

这适用于列表理解和索引未超出迭代范围的其他上下文。

另一种方法是使用
yield
。对于更复杂的操作,这可以更简单、更易于维护:

def generate_less_than(val):
    i = 0
    while i < val:
        yield i
        i += 1

r = list(generate_less_than(5))
def生成小于(val):
i=0
而我

这还可以为您提供一个易于重用的生成器,这意味着您可以允许应用程序的不同部分决定是只需要一个生成器进行迭代,还是需要一个
列表
。参数化也很简单。

不,列表理解中不允许使用语句。尽管签出。感谢e评论说,伙计们,“while不产生序列”是一个很好的提示,因为range实际上已经是上述声明的一个非常紧凑的形式。谢谢Kasramvd,你能详细介绍一下“一次性”吗变量。@Ketan,你在哪里被卡住了?你在发表评论之前搜索过用法,对吗?我希望你在互联网上找到了SO解释和其他解释。@Ketan
\uuuuuuuu
变量是Python中的惯例。它用来表示“我不在乎这个值,也永远不会使用它。”当某个函数返回一个
tuple
,而您只关心部分结果时,通常会使用它,例如:
first\u val,\uu,third\u val=func\u返回\u 3\u tuple()
。我认为该变量的约定不适用于这里,因为您使用的是列表中的值。