gpt4 book ai didi

python - 在 Python 中线性化列表的最短方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:33 25 4
gpt4 key购买 nike

我想在 Python 中从一个值非线性递增的列表中创建一个值线性递增的列表。例如

input =[10,10,10,6,6,4,1,1,1,10,10]

应转换为:

output=[0,0,0,1,1,2,3,3,3,0,0]

我的代码使用了 python 字典

def linearize(input):
"""
Remap a input list containing values in non linear-indices list
i.e.
input = [10,10,10,6,6,3,1,1]
output= [0,0,0,1,1,2,3,3]
"""
remap={}
i=0
output=[0]*len(input)
for x in input:
if x not in remap.keys():
remap[x]=i
i=i+1
for i in range(0,len(input)):
output[i]=remap[input[i]]
return output

但我知道这段代码可以更有效率。一些以更 pythonic 的方式更好地完成这项任务的想法,Numpy 是一个选择吗?在大列表中必须非常频繁地调用此函数。

最佳答案

根据 your comment in the question , 你正在寻找这样的东西

data = [8,8,6,6,3,8]
from itertools import count
from collections import defaultdict
counter = defaultdict(lambda x=count(): next(x))
print([counter[item] for item in data])
# [0, 0, 1, 1, 2, 0]

Thanks to poke ,

list(map(lambda i, c=defaultdict(lambda c=count(): next(c)): c[i], data))

现在只有一个类轮了:)

关于python - 在 Python 中线性化列表的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22037771/

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