gpt4 book ai didi

python - 处理多级列表 (2)

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

假设我有一个这样的列表:

li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']

我怎样才能实现一个以 (elem, indexes) 的形式生成元组的函数:

  • elem是元素
  • indexes 是到达该元素所需的索引。

例子:

>>> for x in my_func(li):
print x
('0', [0])
('1', [1, 0])
('2', [1, 1])
('3', [2, 0])
('4', [2, 1, 0])
('5', [2, 1, 1])
('6', [2, 2])
('7', [2, 3, 0])
('8', [2, 4])
('9', [3])

最佳答案

这是一个嵌套版本

li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
def to_int(lst, path=[]):
for i, j in enumerate(lst):
if isinstance(j, list):
yield list(to_int(j, path+[i]))
else:
yield int(j), path+[i]

print(list(to_int(li)))

还有一个扁平化的版本(Python3.3+)

li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
def to_int(lst, path=[]):
for i, j in enumerate(lst):
if isinstance(j, list):
yield from to_int(j, path+[i])
else:
yield int(j), path+[i]

for item in to_int(li):
print (item)

如果不能使用yield from(

li = ['0', ['1', '2'], ['3', ['4', '5'], '6', ['7'], '8'], '9']
def to_int(lst, path=[]):
for i, j in enumerate(lst):
if isinstance(j, list):
for item in to_int(j, path+[i]): yield item
else:
yield int(j), path+[i]

for item in to_int(li):
print (item)

请注意,将空列表作为默认参数通常不是一个好主意,但在这里我们注意不要改变它,所以没关系。

关于python - 处理多级列表 (2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808123/

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