-2

私はこのコードを変更するのに苦労しています。私はPythonに本当に慣れていないので、ユーザーからの10個の入力整数の中から最も近いペアを見つけようとしています. これまでのコードは次のとおりで、構文エラーがあります...

a = [0,1,2,3,4,5,6,7,8,9] 
a[0]=input() 
a[1]=input() 
a[2]=input() 
a[3]=input() 
a[4]=input() 
a[5]=input() 
a[6]=input() 
a[7]=input() 
a[8]=input() 
a[9]=input() 
a.sort() 
b=sorted(set(a)) 
for item in enumerate(a):
    for item1 in enumerate(b):
        c = item - enumerate(b)
        if c = item-1:
            print item
            print c

ありがとう、アイ

4

2 に答える 2

1

Your code is causing exceptions because you're not handling the output of enumerate properly. Your item values are going to be (value, index) pairs, not single values, so there's no way to subtract them directly.

Here's another implementation, which may be something like what you were aiming for:

import itertools

def find_nearest_pair(lst):
    min_pair = None
    min_distance = float("inf")

    for a, b in itertools.combinations(lst, 2): # generates all (a,b) pairs
        distance = abs(a-b) # abs makes distance always non-negative
        if distance < min_distance:
            min_pair = (a,b)
            min_distance = distance

    return min_pair # you could return min_distance here too (or instead)

You could even compress it down further using the min function:

nearest_pair = min(itertools.combinations(lst, 2),
                   key=lambda item: abs(item[0]-item[1]))

Or if you just want the value:

nearest_pair_distance = min(abs(a-b) for a, b in itertools.combinations(lst, 2))
于 2012-12-06T09:58:32.357 に答える
0

これらすべての呼び出しは何のために行われているenumerateのですか? これは、コレクションを反復処理し、カウンターも保持したい場合です。それらをすべて削除する必要がありますが、特に行内のまったく意味のないものc = item - enumerate(b)を削除する必要があります。

実行すると、多くの論理エラーも表示されるはずですが、それらは自分で修正する必要があります。

于 2012-12-06T09:24:26.230 に答える