我正在尝试找到下面列表中元组之间的距离。
_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__'
有关如何解决此问题的任何建议?感谢。
答案 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)
我认为你的意思是你想要元组元素之间的距离,而不是元组之间的距离。我喜欢其他答案,用列表推导来锻炼总是好的。
只有两件事:
如果你想矢量化(可能加速)操作和
如果您希望结果为实际距离(标准的结果),请使用map
和numpy.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]