1

次のコード スニペットを理解するのを手伝ってください :-

def any(l):
"whether any number is known from list l"
    s = set(list(l)[0])
    for x in l:
        s.intersection_update(set(x))
    return len(s) > 0

ここで、l は3 タプルのリストを含むリストです。 ,5),(23,11,2),(25,5,2)] など 特に3行目の理解に苦労しています

s=set(list(l)[0])
4

3 に答える 3

2
set(list(l)[0])

list(l)から新しいリストを作成し、最初の項目l[0]ある を取得します(17,14,13)。そして、set((17,14,13))このタプルのセットを返します。set は、一意のハッシュ可能な要素のみを含むデータ構造です。つまりset((10,12,10))等しい{10,12}

>>> l=[(17,14,13),(19,17,2),(22,11,7),(22,13,1),(23,10,5),(23,11,2),(25,5,2)]
>>> list(l)[0]
(17, 14, 13)
>>> set(list(l)[0])
{17, 13, 14}
于 2012-06-26T17:54:24.280 に答える
2

ではs=set(list(l)[0])、リストの最初の要素からセットを作成しています。あなたの場合、使用できset(l[0])、同じことを行うことができます。基本的に、リストの最初のタプルに基づいてセットを作成しています。全体として、関数はすべてのタプル間に共通の要素 (数値) があるかどうかを見つけようとしています。

于 2012-06-26T17:57:15.590 に答える
0

Asetはハッシュ可能型の Python コレクションであり、コレクション内のどのエンティティも繰り返すことができないという特別な機能を備えています (その__hash__マジック メソッドから返されるハッシュ、したがってメソッドからのブール値の戻り値__eq__は、リスト内の他のエンティティと同じにすることはできません)。 ) エンティティを繰り返すことができないコレクションが必要な場合に使用されます。

特に l の値はすべてコンテナー リスト内のタプルであるため、使用のコンテキストを知らずにスニペットの意図を完全に伝えることは困難です。はintersection_update、引数として渡された要素にも含まれている要素のみを保持して、元の要素から集合を返す集合のメソッドです。インデックスがゼロのキーは、リストから最初のタプルを取得しています。

http://docs.python.org/library/sets.html

于 2012-06-26T17:55:46.173 に答える