在Python中,我想将列表列表(例如LL1)与其列表的索引进行比较,并创建另一个>列表的列表(例如LL2),使得LL2具有与LL1相同的精确形状。正如我们所看到的,列表 LL1 是非齐次的。例如:
LL1 = [[0, 1, 3, 6, 7], [3, 7], [0, 1, 2, 6, 7], [3], [0, 3, 4, 5, 8]]
LL2 = [[0, 0, 0, 0, 0], [1, 1], [2, 2, 2, 2, 2], [3], [4, 4, 4, 4, 4]]
我想以尽可能最快的方式实现这一目标。目前,我使用以下方法:
MP = map(len, LL1)
LL2 = map( lambda x: MP[x]*[x] , range(len(LL1)) )
对于大型数据集,第二步并不是很快。有没有比我正在做的更快的替代方案?我将非常感谢任何帮助。
最佳答案
您可以使用列表理解一步完成此操作:
>>> LL1 = [[0, 1, 3, 6, 7], [3, 7], [0, 1, 2, 6, 7], [3], [0, 3, 4, 5, 8]]
>>> LL2 = [[i]*len(sub) for i, sub in enumerate(LL1)]
>>> LL2
[[0, 0, 0, 0, 0], [1, 1], [2, 2, 2, 2, 2], [3], [4, 4, 4, 4, 4]]
>>>
另一种方式:
>>> LL2 = [[i for _ in range(len(sub))] for i, sub in enumerate(LL1)]
>>> LL2
[[0, 0, 0, 0, 0], [1, 1], [2, 2, 2, 2, 2], [3], [4, 4, 4, 4, 4]]
>>>
不确定哪个更快...
关于Python:将列表与其索引进行比较并创建一个新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42871228/