我知道我们可以解压列表中的项目。例如这有效:
mynestedlist = [[1,2],[3,4],[5,6],[7,8]]
for a,b in mynestedlist:
print(a)
print(b)
Run Code Online (Sandbox Code Playgroud)
结果:
1
2
3
4
5
6
7
8
Run Code Online (Sandbox Code Playgroud)
是否可以解压看起来像这样的列表?我正在寻找一种可以控制扁平化程度的解决方案,这个问题不仅仅是任意扁平化不规则列表。
myotherlist = [[1,2,['A','B']],[3,4],[5,6],[7,8]]
Run Code Online (Sandbox Code Playgroud)
当我尝试使用相同的方法时,我收到:
ValueError: too many values to unpack (expected 2)
Run Code Online (Sandbox Code Playgroud)
所以我尝试了以下方法:
for a,b,c in mynestedlist:
print(a)
print(b)
print(c)
Run Code Online (Sandbox Code Playgroud)
在这种情况下我收到:
ValueError: not enough values to unpack (expected 3, got 2)
Run Code Online (Sandbox Code Playgroud)
如何解压长度可能变化或不变的嵌套列表,而不必完全展平所有包含的项目?
期望的结果:
1
2
[A,B]
3
4
5
6
7
8
Run Code Online (Sandbox Code Playgroud)
如果你有:
mylist = [[1,2,['A','B']],[3,4],[5,6],[7,8]]
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下推导式进行单级遍历(无需构造任何中间列表):
for v in (y for x in mylist for y in x):
print(v)
Run Code Online (Sandbox Code Playgroud)
这会产生:
1
2
['A', 'B']
3
4
5
6
7
8
Run Code Online (Sandbox Code Playgroud)
如果您想将其展平,您可以创建一个不构造任何中间列表的生成器。请注意,这将处理任意深度的嵌套:
def walk(e):
if type(e) == list:
for v2 in e:
for v3 in walk(v2):
yield v3
else:
yield e
for v in walk(mylist):
print(v)
Run Code Online (Sandbox Code Playgroud)
这会产生:
1
2
A
B
3
4
5
6
7
8
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |