如何在列表中找到元组之间的距离

时间:2014-12-01 13:55:59

标签: python list

我正在尝试找到下面列表中元组之间的距离。

_list=[(1,2),(3,4),(5,6)]

以下是我的尝试以及输出的错误。

print [(x[1][-1]-x[0])for x in _list]

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    [(x[1][-1]-x[0])for x in _list]
TypeError: 'int' object has no attribute '__getitem__'

有关如何解决此问题的任何建议?感谢。

3 个答案:

答案 0 :(得分:4)

当你写:

[x[1] for x in _list]

你会得到:

[2, 4, 6]

所以当你在做的时候:

[(x[1][-1]-x[0])for x in _list]
   ↑
 an int

这就像写1[-1]一样没有意义,这是一个错误。你可能想要:

print [(x[1] - x[0]) for x in _list]

答案 1 :(得分:2)

>>> _list=[(1,2),(3,4),(5,6)]
>>> print [(x[1]-x[0])for x in _list]
[1, 1, 1]
您的代码

错误

print [(x[1][-1]-x[0])for x in _list]
              ^ Not required

与写作相似

>>> 100[-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'

答案 2 :(得分:1)

我认为你的意思是你想要元组元素之间的距离,而不是元组之间的距离。我喜欢其他答案,用列表推导来锻炼总是好的。

只有两件事: 如果你想矢量化(可能加速)操作和 如果您希望结果为实际距离(标准的结果),请使用mapnumpy.linalg.norm

import numpy as np    
_list = [(1, 2) ,(3, 4), (5, 6)]
distances = distancesmap(lambda x: np.linalg.norm(x[0]-x[1]), _list)
print distances
Out[5]: [1.0, 1.0, 1.0]