3

リストのすべての要素 (つまり、[4, 3, 2, 1, 4, 3, 2, 1, 4] などの要素) を他のすべての要素と比較し、要素ごとに他の要素の数を返す方法はありますか?異なる要素 (つまり、上記のリスト [6, 7, 7, 7, 6, 7, 7, 7, 6])? 次に、このリストから番号を追加する必要があります。

4

4 に答える 4

3
li =  [4, 3, 2, 1, 4, 3, 2, 1, 4]

from collections import Counter

c = Counter(li)
print c
length = len(li)

print [length - c[el] for el in li]

c実行する前に作成することは、リストの各要素iに対して[length - c[el] for el in li]行うよりも優れています。これは、同じカウントを数回行うことを意味します(特定の要素に遭遇するたびに、それをカウントします)count(i)count()

ちなみに、それを書く別の方法:

map(lambda x: length-c[x] , li)
于 2013-02-17T00:08:31.830 に答える
2

メソッドを使用して同様のカウンターを取得できますcount()
そして、総数を引きます。
内包リストを使用して1行で実行します。

>>> l = [4, 3, 2, 1, 4, 3, 2, 1, 4]
>>> [ len(l)-l.count(i) for i in l ]
[6, 7, 7, 7, 6, 7, 7, 7, 6]
于 2013-02-17T00:07:01.113 に答える
1

Python 2.7の場合:

test = [4, 3, 2, 1, 4, 3, 2, 1, 4]
length = len(test)
print [length - test.count(x) for x in test]
于 2013-02-17T00:08:26.910 に答える
0

sumジェネレータ式とともに関数を使用することもできます。

>>> l = [4, 3, 2, 1, 4, 3, 2, 1, 4]
>>> length = len(l)
>>> print sum(length - l.count(i) for i in l)
60

ジェネレーター式の良い点は、メモリ内に実際のリストを作成しないことですが、関数のようなものsumはそれらを繰り返し処理して、目的の結果を生成できます。ただし、一度ジェネレーターを反復すると、再度反復することはできないことに注意してください。

于 2013-02-17T00:21:59.847 に答える