2012-04-24 52 views
2

我花了相当一段时间来搜索是否存在类似的问题。不幸的是,我不能只评论以前提出的问题,看看我的尝试失败的原因。 在这个网站上,存在一个问题,即一个人想要根据最接近的数字对特定值进行排序。 他的例子:不是逐字抄袭了他的例子,但把工作解决方案尝试按最接近零的值对列表进行排序,在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) 
+5

你在'更大'列表中有字符串... – jamylak 2012-04-24 14:43:04

+0

输入数据在这里会有所帮助。你也可以调用'abs(int(x))'。 – 2012-04-24 14:43:44

+0

感谢您编辑它,我正在尝试修复它的过程中XD。 – Diosito 2012-04-24 14:46:52

回答

5

你得到的错误输入数据似乎相当不言自明:

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

它看起来像某处在列表中你有一个字符串值而不是数字值。这将工作(假定整数值):

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

...但它会更好地弄清楚为什么你的列表中有串并修复代替。

+0

我认为它是通过浮动代码将其转换为值。 listA.append(int(codes))然后是我想的正确编码? – Diosito 2012-04-24 14:49:53

+0

调用'float()'应该完成同样的事情。并且使用'int()'和'float()'取决于你是期待整数值还是浮点值。 – larsks 2012-04-24 14:52:49

+0

感谢您指出这些问题,并在此项目上工作了一段时间。只有像8年前编程的简单Perl,并采取了Python课程。欣赏帮助 – Diosito 2012-04-24 14:57:31

相关问题