lin*_*llo 3 python algorithm dictionary list
我想从列表中使用线性增加的值创建一个列表,其中Python中的值非线性增加.例如
input =[10,10,10,6,6,4,1,1,1,10,10]
Run Code Online (Sandbox Code Playgroud)
应转变为:
output=[0,0,0,1,1,2,3,3,3,0,0]
Run Code Online (Sandbox Code Playgroud)
我的代码使用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
Run Code Online (Sandbox Code Playgroud)
但我知道这段代码可以更有效率.Numpy是一个选择,有些想法可以更好地以更加pythonic的方式完成这项任务吗?必须在大列表上频繁调用此函数.
根据你在问题中的评论,你正在寻找这样的东西
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]
Run Code Online (Sandbox Code Playgroud)
感谢戳,
list(map(lambda i, c=defaultdict(lambda c=count(): next(c)): c[i], data))
Run Code Online (Sandbox Code Playgroud)
它现在只是一个班轮:)
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |