0

私はいくつかの構文を持っています:

l_one = [ x for x in someList ] # list with duplicates
l = []
l_two = [ l.append( y ) for y in l_one if y not in l ] # duplicates removed

l と l_two はどちらも重複のない同じリストです。行を減らしてワンライナーを使用する方法はありますか?

EDIT : 訂正 - l_two は「なし」リストです。

4

2 に答える 2

3

実際、それらは同じではありません。リストをその場で変更するため、.append()が返されます。ただし、重複のないリストになります。Nonel_twoNonel

リストから重複を削除したい場合は、それをセットにすることができます:

l_two = list(set(l_one))

これにより注文が削除されることに注意してください。


ハッシュ不可能な型を使用したい場合は、リスト内包表記の代わりに for ループを使用してみてください。

l_one = [x for x in someList]
l_two = []
for i in l_one:
    if i not in l_two:
        l_two.append(i)

または:

from itertools import groupby
l_two = [key for key, value in groupby(l_one)]
于 2013-07-19T09:32:20.793 に答える
1

私が正しく理解しているsomeList場合、重複がある可能性のあるというリストから始めていますが、同じリストで終了したいが、重複は削除されていますか?

コードの最初の行を削除することから始めることができます。これは、someList を l_one という新しい (ただし同一の) リストに複製するだけです。

>>> someList = [ 3,1,4,1,5,9,2,7 ]
>>> l = []
>>> [ l.append(y) for y in someList if y not in l]
[None, None, None, None, None, None, None]
>>> print l
[3, 1, 4, 5, 9, 2, 7]
>>>

これは、 someList の要素自体がリストであっても機能します。

>>> l = []
>>> someList = [[1,2],[2,1],[1,2],[3,4]]
>>> l = []
>>> [ l.append(y) for y in someList if y not in l]
[None, None, None]
>>> print l
[[1, 2], [2, 1], [3, 4]]
>>>
于 2013-07-19T09:35:45.220 に答える