1

次のコードを実行すると、エラーが発生します。

def genSet(nums):
    for i in range(0, len(nums)-1):
        for x in range(0, len(nums)-1):
            if nums[x] == nums[i]:
                del nums[x] 
    return nums

a = [5, 4, 3, 5, 6, 7, 8, 5, 4, 3]  
print genSet(a)

出力:

Traceback (most recent call last):
  File "49.py", line 9, in <module>
    print genSet(a)
  File "49.py", line 4, in genSet
    if nums[x] == nums[i]:
IndexError: list index out of range

私が知る限り(ifステートメントを "print x、i"に置き換えました)、2つのforループは問題ありませんが、なぜインデックスが範囲外なのですか?

4

4 に答える 4

5

del nums[x]このようにするとnums短くなり、例外が発生するため、実行しないでください。

あなたは単にリストからセットを作ることができますset_nums = set(nums)

于 2012-08-30T09:10:52.310 に答える
3

から要素を削除しているnumsため、要素が短くなり、IndexErrorが発生します。

とにかく、すべての要素がリスト内に少なくとも1つの同一の要素を持っているため、コードはすべてを削除します(それ自体!)。要素の「一意の」リストを作成する場合は、次のセットを作成します。

unique_set = set(nums)

そしてそれを再びリストに変換します:

unique_list = list(set(nums))
于 2012-08-30T09:10:20.337 に答える
0

番号が同じであるインデックスを見つけて、リストをnumpy配列にして、コマンドnums = np.array(nums)を使用することができますnp.delete

于 2012-08-30T09:16:27.377 に答える
0

あなたが与える例は、1行のコードで簡単に置き換えることができます:

print set([5, 4, 3, 5, 6, 7, 8, 5, 4, 3])

リスト内の重複を自分で本当に除外したい場合は、次のようにします。

nums = sorted([5, 4, 3, 5, 6, 7, 8, 5, 4, 3])
print reduce(lambda x,y:(y not in x and x+[y]) or x, nums, [])
于 2012-08-30T10:09:58.560 に答える