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

尝试使用python中的绝对值按最接近零的值对列表进行排序,python,Python,我花了相当长的时间搜索,看看是否有类似的问题。不幸的是,我无法对之前提出的问题发表评论,以了解我的尝试为何无效。 在这个网站上,有一个问题,人们想根据与特定值最接近的数字对列表进行排序。 他的例子:不是逐字复制他的例子,而是提出一个可行的解决方案 它将返回按最接近4的值排序的列表(5,2,1,11) 但是,当尝试按最接近零的值对更大的列表进行排序时,我遇到了这样的情况: listA.sort(key = lambda x: abs(x)) Traceback (most recent call

我花了相当长的时间搜索,看看是否有类似的问题。不幸的是,我无法对之前提出的问题发表评论,以了解我的尝试为何无效。 在这个网站上,有一个问题,人们想根据与特定值最接近的数字对列表进行排序。 他的例子:不是逐字复制他的例子,而是提出一个可行的解决方案

它将返回按最接近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'

您遇到的错误似乎是不言自明的:

TypeError: bad operand type for abs(): 'str'
看起来列表中的某个地方有一个字符串值而不是数字值。这将起作用(假设为整数值):


…但是最好弄清楚为什么列表中有字符串,然后改为修复。

您的“较大的”
列表中有字符串。
…这里的输入数据会很有用。您也可以调用
abs(int(x))
。感谢您的编辑,我正在尝试修复它XD。通过谷歌搜索“abs()的错误操作数类型:'str'”对第一个结果给出了有用的答案。decrange只是一个范围函数,允许更小的步骤,i=.01在这种情况下,我认为通过浮点代码可以将其转换为值。append(int(codes))是正确的编码吗?调用
float()。使用
int()
vs
float()
取决于您期望的是整数值还是浮点值。感谢您指出这些Larsk,他们已经在这个程序上工作了很长时间。仅仅像8年前那样编写了简单的perl,并参加了python课程。感谢您的帮助如果此答案有帮助,请花点时间单击答案左侧的复选标记,将其标记为已接受。谢谢
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)
TypeError: bad operand type for abs(): 'str'
listA.sort(key = lambda x: abs(int(x)))