我有一个Python列表,我希望(尽可能快地:非常重要......)在每个子列表中附加它在嵌套列表中出现的时间.
我已经用一些pandas数据框完成了这个,但是这看起来非常慢,我需要非常大规模地运行这些行.我完全愿意牺牲好读的代码来实现高效的代码.
所以例如我的嵌套列表在这里:
l = [[1, 3, 2], [1, 3, 2] ,[1, 3, 5]]
Run Code Online (Sandbox Code Playgroud)
我需要:
res = [[1, 3, 2, 2], [1, 3, 5, 1]]
Run Code Online (Sandbox Code Playgroud)
编辑
订单res根本无关紧要.
Dan*_*ejo 10
如果顺序无关紧要,您可以使用collections.Counter和扩展的可迭代解包,作为@Chris_Rands解决方案的变体:
from collections import Counter
l = [[1, 3, 2], [1, 3, 2] ,[1, 3, 5]]
result = [[*t, count] for t, count in Counter(map(tuple, l)).items()]
print(result)
Run Code Online (Sandbox Code Playgroud)
产量
[[1, 3, 5, 1], [1, 3, 2, 2]]
Run Code Online (Sandbox Code Playgroud)
这是一个很奇怪的输出需要,但它当然是可能的.我建议使用collections.Counter(),毫无疑问,其他人会提出不同的建议,timeit风格比较会显示特定数据集的最快速度:
>>> from collections import Counter
>>> l = [[1, 3, 2], [1, 3, 2] ,[1, 3, 5]]
>>> [list(k) + [v] for k, v in Counter(map(tuple,l)).items()]
[[1, 3, 2, 2], [1, 3, 5, 1]]
Run Code Online (Sandbox Code Playgroud)
需要注意的插入顺序保存之前CPython的3.6/Python的3.7,使用的OrderedCounter配方.
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |