复制嵌套列表并用连续数字填充它

off*_*fel 2 python

给定这个嵌套列表:

foo = [["apple", "cherry"], ["banana"], ["pear", "raspberry", "pineapple"]]
Run Code Online (Sandbox Code Playgroud)

我想保留结构并用连续数字替换所有项目.我想要的输出是:

[[0, 1], [2], [3, 4, 5]]
Run Code Online (Sandbox Code Playgroud)

我希望有一个简单的单行,但我提出的最短的工作解决方案是:

foo_numbers = []
count = 0

for i, sublist in enumerate(foo):
    foo_numbers.append([])
    for item in sublist:
        foo_numbers[i].append(count)
        count += 1
Run Code Online (Sandbox Code Playgroud)

通常这些手动迭代器表明有更多的pythonic方法来实现同样的事情.如果要完成列表理解,我无法看到如何为两个循环组成一个"共享计数器",所以它不会从零开始sublist.

jpp*_*jpp 5

您可以使用itertools.count嵌套列表理解:

from itertools import count

foo = [["apple", "cherry"], ["banana"], ["pear", "raspberry", "pineapple"]]

c = count()  # 0 start is default, e.g. count(1) will start from 1
res = [[next(c) for _ in lst] for lst in foo]

print(res)
# [[0, 1], [2], [3, 4, 5]]
Run Code Online (Sandbox Code Playgroud)