尝试使用python中的绝对值,按最接近零的值对列表进行排序

时间:2012-04-24 14:40:55

标签: python

我花了很长时间搜索是否存在类似的问题。不幸的是,我不能只是评论之前提出的问题,看看为什么我的尝试不起作用。 在这个网站上存在一个问题,一个人想要根据与特定值最接近的数字对列表进行排序。     他的例子:不是逐字复制他的例子,而是提出一个有效的解决方案

list_x = [1,2,5,11]
list_x.sort(key = lambda x: abs(x-4))

将返回按最接近4 (5,2,1,11)的值排序的列表 但是,当尝试按最接近零的值对更大的列表进行排序时,这种情况发生在我身上:

listA.sort(key = lambda x: abs(x))

Traceback (most recent call last):
  File "<pyshell#382>", line 1, in <module>
    listA.sort(key = lambda x: abs(x))
  File "<pyshell#382>", line 1, in <lambda>
    listA.sort(key = lambda x: abs(x))
TypeError: bad operand type for abs(): 'str'

我到底做错了什么,以防止列表按绝对值排序?

这是listA

的输入数据
for i in decrange(0, 13, i):
   code = (func(seq, float(i)))
   codes = '%.3f' % code
   listA.append(float(codes))
   listB.append(str(codes))
listA.sort(key = lambda k: abs(k))
x = listA[0]
answer = listB.index(x) * float(.01)

1 个答案:

答案 0 :(得分:5)

你得到的错误似乎是不言自明的:

TypeError: bad operand type for abs(): 'str'

看起来你的列表中的某个地方有一个字符串值而不是数值。这将起作用(假设整数值):

listA.sort(key = lambda x: abs(int(x)))

...但最好弄清楚为什么你的列表中包含字符串并修复