gpt4 book ai didi

列表列表的Python列表

转载 作者:行者123 更新时间:2023-11-28 20:51:36 25 4
gpt4 key购买 nike

除了获得理解之外,我没有这样做的真正原因,但我正在尝试使用列表理解创建列表列表的列表。

我可以很好地创建列表列表:

In[1]: [j for j in [range(3,k) for k in [k for k in range(5,10)]]]
Out[1]: [[3, 4], [3, 4, 5], [3, 4, 5, 6], [3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8]]

而且我可以根据结果创建一个列表列表列表,例如:

In [2]: [range(0,i) for i in [3,4]]
Out[2]: [[0, 1, 2], [0, 1, 2, 3]]

In [3]: [range(0,i) for i in j]
Out[3]:
[[0, 1, 2],
[0, 1, 2, 3],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6, 7]]

但是当我尝试将它组合成一个语句时,它出错了:

In [4]: [range(0,i) for i in [j for j in [range(3,k) for k in [k for k in range(5,10)]]]]
---------------------------------------------------------------------------
TypeError: range() integer end argument expected, got list.

我是不是在某处遗漏了一些括号?

最佳答案

尝试以下操作:

[[range(0, j) for j in range(3, i)] for i in range(5, 10)]

这会产生以下列表列表:

>>> pprint.pprint([[range(0, j) for j in range(3, i)] for i in range(5, 10)])
[[[0, 1, 2], [0, 1, 2, 3]],
[[0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]],
[[0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5]],
[[0, 1, 2],
[0, 1, 2, 3],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5, 6]],
[[0, 1, 2],
[0, 1, 2, 3],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6, 7]]]

了解列表理解中发生的事情的最好方法是尝试将其展开到正常的 for 循环中,让我们用你的和我的尝试一下,看看有什么区别:

x = [range(0,i) for i in [j for j in [range(3,k) for k in [k for k in range(5,10)]]]]
# equivalent to
a, b, c, x = [], [], [], []
for k in range(5, 10):
a.append(k)
for k in a:
b.append(range(3, k))
for j in b:
c.append(j)
for i in c:
x.append(range(0, i))

在此 x 的末尾等同于您的列表理解,但是当然此代码将不起作用,因为 b(和 c) 将是列表的列表,因此 i 将是一个列表,而 range(0, i) 将导致错误。现在显然这不是您想要做的,因为您真正希望看到的是那些嵌套的 for 循环,而不是一个接一个地嵌套。

让我们看看我的工作原理:

x = [[range(0, j) for j in range(3, i)] for i in range(5, 10)]
# equivalent to
x = []
for i in range(5, 10):
a = []
for j in range(3, i):
a.append(range(0, j)):
x.append(a)

希望这有助于澄清!

关于列表列表的Python列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116717/

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