将列表转换为0-1.0的索引和范围

1 投票
5 回答
5760 浏览
提问于 2025-04-17 16:51

编辑:我更新了图形,试图解释我想要达到的目标。

5 个回答

1

注意:因为“list”是一个关键字,所以你不应该把你的变量命名为list。enumerate(oldlist) 是一个生成器,它会从oldlist中返回一对对的索引和列表元素。这个列表推导式会返回所有的索引值,并把它们存储在newlist中。如果你需要同时获取元素和索引,这种方法是个不错的选择。不过,如果你的列表很大,使用range(len(thelist))的方法会更快一些。

newlist = [i for i,_ in enumerate(oldlist)]
4

这行代码的意思是创建一个新的列表,叫做 new_list。这个列表的内容是从 0 开始,到 old_list 的长度减 1 的一系列数字。简单来说,如果 old_list 有 5 个元素,那么 new_list 就会包含数字 0、1、2、3、4。

1

看看这个...

In [24]: value = [17, 18, 19, 0, 1]

In [25]: valueIndex = range(len(value))

In [26]: valueIndex
Out[26]: [0, 1, 2, 3, 4]

# Get the valueRemapped in float format
In [27]: valueRemapped = [float(x)/valueIndex[-1] if x > 0 else x for x in valueIndex]

In [28]: valueRemapped
Out[28]: [0, 0.25, 0.5, 0.75, 1.0]

# Zip the two lists
In [29]: tempresult = zip(value, valueRemapped)

In [30]: tempresult
Out[30]: [(17, 0), (18, 0.25), (19, 0.5), (0, 0.75), (1, 1.0)]

# Sort the lists based on value list
In [31]: tempresult.sort(key=operator.itemgetter(0))

In [32]: tempresult
Out[32]: [(0, 0.75), (1, 1.0), (17, 0), (18, 0.25), (19, 0.5)]

# print the corresponding data
In [33]: [x[1] for x in tempresult]
Out[33]: [0.75, 1.0, 0, 0.25, 0.5]

撰写回答