Python 如何获得;相对位置“;列表中索引的数量?

Python 如何获得;相对位置“;列表中索引的数量?,python,Python,我试图得到索引在列表中的相对位置。这些列表都有不同的长度。假设我们有两个列表: >>> list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 两个列表中元素3的索引为: >>> list1.index(3) 3 >>> list2.index(3) 3 “绝对位置”

我试图得到索引在列表中的相对位置。这些列表都有不同的长度。假设我们有两个列表:

>>> list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
两个列表中元素
3
的索引为:

>>> list1.index(3)
3
>>> list2.index(3)
3
“绝对位置”都是
3
,但常识上说,它们的相对位置会不同,因为每个列表的长度不同

我所做的只是将两个列表按其最大的元素划分,然后创建一个字典,将原始元素映射到新创建的相对位置

>>> list1_norm = {key: value for (key, value) in zip(list1, [(x / max(list1)) for x in list1])}
>>> list2_norm = {key: value for (key, value) in zip(list2, [(x / max(list2)) for x in list2])}
>>> list1_norm
{0: 0.0,
 1: 0.1111111111111111,
 2: 0.2222222222222222,
 3: 0.3333333333333333,
 4: 0.4444444444444444,
 5: 0.5555555555555556,
 6: 0.6666666666666666,
 7: 0.7777777777777778,
 8: 0.8888888888888888,
 9: 1.0}
>>> list2_norm
{0: 0.0,
 1: 0.07142857142857142,
 2: 0.14285714285714285,
 3: 0.21428571428571427,
 4: 0.2857142857142857,
 5: 0.35714285714285715,
 6: 0.42857142857142855,
 7: 0.5,
 8: 0.5714285714285714,
 9: 0.6428571428571429,
 10: 0.7142857142857143,
 11: 0.7857142857142857,
 12: 0.8571428571428571,
 13: 0.9285714285714286,
 14: 1.0}
现在我们可以看到:

>>> list1_norm.index(3)
现在我们知道,对于每个列表,
3
相对于列表长度的位置是
0.3333
0.21428


有没有其他方法可以让我实现相同的概念,而不必执行繁琐的列表和词典理解?谢谢。

将索引除以-1的长度

def rel_index(l, elem):
    return l.index(elem)/(len(l) - 1)
用法:

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

print(rel_index(list1, 3))
print(rel_index(list2, 3))
输出:

0.3333333333333333
0.2
这将在0.0到1.0之间均匀分布/指定图元

如果要将元素从1/n均匀分布到1.0,请改用以下方法

def rel_index(l, elem):
    return (l.index(elem) + 1)/(len(l))

首先,如果你愿意,你可以完全避免理解和口述。您可以简单地创建一个函数(或lambda,如果您想让它保持一个实现相同逻辑的单行程序:

>>> list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> rel_pos = lambda l, elem: elem / max(l)
>>> rel_pos(list1, 5)
0.5555555555555556

另一件事,你可以考虑用这个方法来实现你自己的类——你可以在你自己的类中实现你想要的任何查找方法。例如:

>>> import collections
>>> class MyList(collections.UserList):
...     def rel_pos(self, elem):
...         return elem / max(self)
...
>>> my_list1 = MyList(list1)
>>> my_list1.rel_pos(5)
0.5555555555555556

这两种解决方案都不可能呈现您想要的完全相同的行为,但是您可以自由地实现这一点以满足您的需要。

在您上面的代码中,我认为
list1\u norm[3]
相当于
list1.index(3)/max(list1)
。但是根据您在问题中所描述的内容,我认为您想要
list1.index(3)/len(列表1)
。这两个是你想要的答案吗?啊,是的,你是对的。我最初使用的是
len
,但我想对于这个例子,我的大脑告诉我写
max
。谢谢你指出这一点!我的问题怎么没有重点?如果投票结束的人能够详细说明,我就可以做一些编辑了。