繁体   English   中英

使用具有列表理解功能的嵌套for循环构建列表

[英]Build list using nested for loops with list comprehension

我需要使用列表理解来建立列表。 这基本上是它要做的:

pattern = []
for c in range(3):
    for r in range(3):
        if r == c:
            pattern.append(a)
        else:
            pattern.append(b)

但这一切都只需要压缩为一条线! 我以前从未使用过列表理解功能,因此请解释您的解决方案。

谢谢!

编辑:如果我希望新列表包含子列表,是否也可以将其放入列表理解中? 上面我使用的范围是3,因此在产生的列表中,每个子列表将包含3个元素,即

pattern = [['a','b','b'],['b','a','b'],['b','b','a']]

列表理解的一般形式可以这样理解

[(the task to be done) (how long it has to be done)]

我们通常使用for循环来说明必须完成多长时间 ,以及if条件也可以完成的任务 要注意的重要一点是, 要完成的任务部分应该返回一个有效值(即使None是有效值)。 因此,您不能在列表推导中使用任何Python语句( return ,在Python 2.x print等中)。

现在回答您的第一个问题,

['a' if r == c else 'b' for c in range(3) for r in range(3)]
# ['a', 'b', 'b', 'b', 'a', 'b', 'b', 'b', 'a']

正如您在for循环版本中显示的那样,这将精确地创建一个列表。

'a' if r == c else 'b'

这和

if r == c:
    'a'
else:
    'b'

首先, for c in range(3)将执行for c in range(3)并生成列表[0, 1, 2] ,然后在每次迭代中for r in range(3)并执行列表[0, 1, 2]将被生成。 r每次迭代中,将执行上面看到的if条件,并且if..else的结果将用作所生成的新列表的元素。

要回答第二个问题,您可以很好地使用列表理解。

从上面的示例中我们的基本理解是,列表理解是生成列表。 现在,让我们尝试嵌套列表推导(我们将在要完成的任务的一部分中使用列表推导),像这样

[['a' if r == c else 'b' for r in range(3)] for c in range(3)]
# [['a', 'b', 'b'], ['b', 'a', 'b'], ['b', 'b', 'a']]

现在,如果您看一下嵌套列表的理解,将首先for c in range(3)执行,然后['a' if r == c else 'b' for r in range(3)]则执行['a' if r == c else 'b' for r in range(3)]将执行,这将生成嵌套列表的各个行。 这里要注意的重要事情是,嵌套列表推导中可以使用c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM