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
。谢谢你指出这一点!我的问题怎么没有重点?如果投票结束的人能够详细说明,我就可以做一些编辑了。