1

リストがあります:

color_list = [    ['black', 'maroon', 'maroon', 'maroon', 'maroon']
['purple', 'black', 'maroon', 'maroon', 'maroon']
['maroon', 'purple', 'maroon', 'teal', 'teal']
['maroon', 'maroon', 'purple', 'maroon', 'maroon']
['teal', 'olive', 'teal', 'maroon', 'maroon']
    ....
 ]

今、私は次のことを数えたいと思います:

あずき色と黒が一緒に出現した回数

紫と黒が何回一緒に現れたか

あずき色と紫が一緒に出現した回数。

color_list の色は、定義済みの色から取得されます。つまり、色 ['red','green','teal'....] のリストがあり、基本的に、color_list で赤と緑が一緒に "n" 回出現することでカウントを見つけたいとします。 . red と teal は "m" 回一緒に発生します.. など..

そして..次のステップは、赤、緑、青の回数を見つけることです..(一度に3回)...

これをPythonで実装する最良の方法は何ですか?

4

4 に答える 4

6

collections.Counter を使用できます。

color_list = [                                        
['black', 'maroon', 'maroon', 'maroon', 'maroon']  ,   
['purple', 'black', 'maroon', 'maroon', 'maroon']  ,   
['maroon', 'purple', 'maroon', 'teal', 'teal']     ,   
['maroon', 'maroon', 'purple', 'maroon', 'maroon'] ,   
['teal', 'olive', 'teal', 'maroon', 'maroon']         
]                                                     

from collections import Counter

cnt = [Counter(x) for x in color_list]

for x, y in [('black', 'maroon'), ('teal', 'olive')]:
    print x, y, sum(min(c[x], c[y]) for c in cnt)
于 2012-05-02T18:08:27.480 に答える
3

サブリスト内の任意の数の出現を「一緒に」1つを意味すると仮定すると:

color_sets = [set(sublist) for sublist in color_list]
looking_for = {"maroon", "black"}
sum(looking_for <= sublist for sublist in sublist)

これは、リストをセットにしてlooking_forから、セットのサブセットであるかどうかを確認し、結果を合計することで機能します (整数としてTrue数えます)。1

編集:

発生回数を重要にしたいというコメントを見ました。その場合、私が持っていたものの簡単な適応は次のとおりです。

sum(min(sublist.count(item) for item in looking_for) for sublist in color_list)

ただし、非常によく使用されるため、これは大きなslist.count()ではあまり効率的ではありません。looking_for

于 2012-05-02T17:53:36.947 に答える
1

与えられたリストから作成できるすべての色のペアの組み合わせを探しているだけのようです。私はオフかもしれませんが、それがあなたの目標なら、それは簡単な問題です. セット内の一意のアイテムを取得し、リストの長さ - 1 を合計するだけです。これは、順序が重要でないペアを見つけるための標準的なソリューションです。たとえば、4 つのリストの一番左の要素から開始すると、インデックス 0 になります。その右側には、ペアにすることができる 3 つの項目があります。インデックス 1 に移動します。既にインデックス 0 のペアをカウントしているため、その右側にペアにすることができる項目が 2 つあります。Python でこれを行う簡単な方法は、

sum(xrange(0, len(set(colors))-1))

任意のリスト内で特定の色のペアを見つける必要がある場合は、同様に簡単です。

sum(xrange(0, len(set(colors) & set(chosen_colors))-1))

PSset交差はお尻を蹴る

于 2012-05-02T18:04:15.717 に答える
1

あなたの問題はAssociation Rule Miningとよく似ています。http://orange.biolab.si/doc/ofb/assoc.htmをご覧ください。

于 2012-05-02T17:54:37.633 に答える