gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:51:19 24 4
gpt4 key购买 nike

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

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) 并生成列表 [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)] 部分将被执行,这将生成嵌套列表的各个行。这里需要注意的重要一点是,c 在嵌套列表理解中可用。

关于python - 使用具有列表理解功能的嵌套 for 循环构建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com