1

辞書を使用して、リスト内の重複するアイテムを削除しようとしています:

def RemoveDuplicates(list):
    d = dict()

    for i in xrange(0, len(list)):
        dict[list[i]] = 1       <------- error here

    return d.keys()

しかし、それは私に次のエラーを引き起こしています:

TypeError: 'type' object does not support item assignment

何が問題ですか?

4

5 に答える 5

11

あなたは書いたはずです:

d[list[i]] = 1

しかし、なぜこれをしないのですか?

def RemoveDuplicates(l):
    return list(set(l))

また、組み込み関数名を変数名として使用しないでください。紛らわしいバグにつながる可能性があります。

于 2009-11-28T19:18:15.623 に答える
4

他の人が言ったことに加えて、これを行うのは非pythonicです:

for i in xrange(0, len(lst)):
    do stuff with lst[i]

代わりにこれを行うことができる場合:

for item in lst:
    do stuff with item
于 2009-11-28T19:31:17.640 に答える
3

dict はタイプですd[list[i]] = 1

追加: これは、コード内の実際のエラーを指摘します。しかし、他の人が提供する答えは、あなたが目指していることを達成するためのより良い方法を提供します.

于 2009-11-28T19:19:02.347 に答える
3
def remove_duplicates(myList):
    return list (set(myList))

あなたのコードを見ると、要素の順序は気にせず、一意性だけに関心があるようです。そのような場合、set() の方が優れたデータ構造である可能性があります。

コードの問題は、組み込み型リストの名前ではない関数引数名を使用し、後で式の型 dict を使用することdict[list[i]]です。

于 2009-11-28T19:20:26.587 に答える
0

list(set(seq))を使用すると、残りの項目の順序が変わる可能性があることに注意してください。順序を維持することが重要な場合は、リストのコピーを作成する必要があります。

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
于 2009-11-28T20:14:37.507 に答える