gpt4 book ai didi

python - 将列表的多级列表展平为单级

转载 作者:行者123 更新时间:2023-12-05 01:00:58 26 4
gpt4 key购买 nike

我需要展平多级列表的所有级别:

import itertools

pool = [[[[[0,2],[1,3]],[[3,2],[1,0]]],"PdPd","PrisonerDilemma"],
[[[[0,3],[1,2]],[[2,3],[1,0]]],"ShSh","StagHunt"],
[[[[1,2],[3,0]],[[3,2],[1,0]]],"ChCh","Chicken"],
[[[[2,1],[0,3]],[[3,1],[0,2]]],"BaBa","Battle"]]

def flat3 (pool):
for game in pool:
l = list(itertools.chain.from_iterable(game[0]))
print(l)

结果:

flat3 (pool)
[[0, 2], [1, 3], [3, 2], [1, 0]]
[[0, 3], [1, 2], [2, 3], [1, 0]]
[[1, 2], [3, 0], [3, 2], [1, 0]]
[[2, 1], [0, 3], [3, 1], [0, 2]]

所以,目标是隔离并返回每个项目中的第一级,只包含数字,例如:

[[[[[0,2],[1,3]],[[3,2],[1,0]]],"PdPd","PrisonerDilemma"]

然后我需要将所有内容都展平到同一级别,例如:

[0,2,1,3,3,2,1,0]

我知道有很多关于这个主题的 Material ,并且我已经找到并尝试了很多方法来做到这一点,但是似乎没有一种方法适用于超过一个级别,我想知道是否有一种有效的方法来做到这一点,无需多次重复相同的命令。谁能帮帮我?

最佳答案

与往常一样,第一步是查看您的数据结构。

el = [
[
[[0,2],[1,3]],
[[3,2],[1,0]]
],
"PdPd",
"PrisonerDilemma"
]

这是结构中的每个单独元素。我们暂时忽略这个最外层的结构几乎肯定不应该是一个列表(在我看来它更像一个元组),而只关注我们所拥有的。

el[0] = [ [[0, 2], [1, 3]],
[[3, 2], [1, 0]] ]
el[1] = # a string
el[2] = # another string, we don't care about these

现在我们已将其简化为数字列表列表。我们可以对这个进行操作。

def flatten(lst):
for el in lst:
if isinstance(el, list): # N.B. this only works for lists, not general
# collections e.g. sets, tuples, dicts, etc...
# recurse
yield from flatten(el)
else:
# generate
yield el

您的结果就是将此函数应用于最外层列表中每个项目的第一个元素。

result = [flatten(sublst[0]) for sublst in big_list]

请注意,这会创建一个生成器对象列表,需要使用这些生成器对象才能实际生成值。如果您出于某种原因确实需要列表本身,请显式转换为列表:

result = [list(flatten(sublst[0])) for sublst in big_list]

关于python - 将列表的多级列表展平为单级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47983117/

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