-4

重複の可能性:
順序を維持しながら Python のリストから重複を削除するにはどうすればよいですか?

この質問はとても簡単かもしれません。たとえば、次のようなリストがあります。

a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]

リストに同じ要素を保持したくありません。したがって、次のように変換します。

a = [1,2,3,4,5,6,7,8,9,14]

どうすればこれを管理できますか? 前もって感謝します。

4

5 に答える 5

4

それをセットに変換します。

a = list(set(a))
于 2013-01-23T22:06:31.160 に答える
4

itertools のunique_everseen レシピを使用すると、順序が維持されます。

順序が重要でない場合は、 を使用しますset()

In [294]: a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]

In [295]: list(unique_everseen(a))
Out[295]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 14]

unique_everseen:

def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in ifilterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element
于 2013-01-23T22:07:48.940 に答える
2

リストをセットに変換すると、重複が削除され、リストに変換されます。

a = list(set(a)) 
于 2013-01-23T22:06:54.037 に答える
1
import itertools
a = [k for k, g in itertools.groupby(a)]

これは、例のように、元のリストの重複するアイテムが既にグループ化されていることを前提としています。この方法を使用する利点はset()、元の順序が維持されることです。

于 2013-01-23T22:08:03.593 に答える
0

または、順序を維持する必要がある場合sorted:

a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]
sorted(set(a))

結果:

[1、2、3、4、5、6、7、8、9、14]

于 2013-01-23T22:09:12.917 に答える