2

同様の問題があるかどうかを確認するために、かなりの時間をかけて検索しました。残念ながら、以前に尋ねられた質問にコメントして、私の試みがうまくいかなかった理由を確認することはできませんでした. このサイトには、特定の値に最も近い数値に従って、リストを並べ替えたいという質問があります。彼の例: 彼の例を逐語的にコピーするのではなく、実用的な解決策を提示する

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)
4

1 に答える 1

5

あなたが得ているエラーはかなり自明のようです:

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

リストのどこかに、数値ではなく文字列値があるようです。これは機能します(整数値を想定):

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

...しかし、リストに文字列が含まれている理由を理解し、代わりにそれを修正することをお勧めます。

于 2012-04-24T14:44:02.957 に答える