给定这个嵌套列表:
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.
您可以使用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)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |