我知道我们可以打开列表内的物品。例如,这有效:
mynestedlist = [[1,2],[3,4],[5,6],[7,8]]
for a,b in mynestedlist:
print(a)
print(b)
结果:
1
2
3
4
5
6
7
8
是否可以解压缩看起来像这样的列表?我正在寻找一种可以控制展平级别的解决方案,这个问题不仅仅是简单地展平不规则列表。
myotherlist = [[1,2,['A','B']],[3,4],[5,6],[7,8]]
当我尝试相同的方法时,会收到:
ValueError: too many values to unpack (expected 2)
所以我尝试了以下方法:
for a,b,c in mynestedlist:
print(a)
print(b)
print(c)
在这种情况下,我收到:
ValueError: not enough values to unpack (expected 3, got 2)
如何解压缩嵌套列表,这些嵌套列表的长度可以变化也可以不变化,而不必完全展平所有包含的项目?
所需结果:
1
2
[A,B]
3
4
5
6
7
8
答案 0 :(得分:4)
如果您有:
mylist = [[1,2,['A','B']],[3,4],[5,6],[7,8]]
然后,您可以使用以下方法进行理解的单级遍历(不构造任何中间列表):
for v in (y for x in mylist for y in x):
print(v)
这将产生:
1
2
['A', 'B']
3
4
5
6
7
8
如果要展平它,可以创建一个不再构造任何中间列表的生成器。请注意,这将处理任意深度的嵌套:
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)
这将产生:
1
2
A
B
3
4
5
6
7
8
答案 1 :(得分:1)
您可以根据列表中元素的类型来进行拆包。
def unpack(element):
if isinstance(element, list):
return element[0]
return element
output_list_ = []
for item_ in input_list_:
output_list_[input_list_.index(item_)] = (
unpack(item_))
答案 2 :(得分:1)
尝试使用总和将其平整
myotherlist = [[1,2,['A','B']],[3,4],[5,6],[7,8]]
newlist = sum(myotherlist, [])
for elem in newlist:
print(elem)
输出:
1
2
['A', 'B']
3
4
5
6
7
8
如果您还有其他期望,请在评论中告诉我。