2016-05-18 5 views
3

私のようなものを見た:Python:set()内の理解は何を意味しますか?

set(x for x in [1, 2, 3]) 

を私はx for x in [1, 2, 3]が理解ですけど、x for x in [1, 2, 3]自体が無効であるので、私は、そのための有効な文法を見つけることができません。

+1

https://docs.python.org/3/reference/expressionshtml#generator-expressions – vaultah

答えて

2

python3 reference

call ::= primary "(" [argument_list [","] | comprehension] ")" 
comprehension ::= expression comp_for 

チェック:

set(x for x in [1, 2, 3]) 

setxexpressionで、for x in [1, 2, 3]それはジェネレータ式comp_for

4

理解度に基づいてセットを作成することです。例:結果がセットになります

a = set(x for x in [1, 2, 3]) 
print(a) 

そうしない
a = set([1, 2, 3]) 

:上記の例では

{1, 2, 3} 

、ロジックであることを起こるするように簡略化することができます全く理解する必要がある

4

で、primaryです。彼らは通常、括弧で囲まれているが、式は関数呼び出しの唯一の引数である場合には括弧を省略することができます。

>>> generator = (x for x in [1, 2, 3]) 
>>> generator.next() 
1 
>>> set(generator) 
set([2, 3]) 

ジェネレータオブジェクトは、彼らが値を一つずつを生産、反復処理することができます。ここでのリスト理解を使用する場合と比較すると、中間リストオブジェクトを作成する必要がないという利点があります(3つではなく100万の要素がある場合はさらに重要です)。

ドキュメント:理解に基づいてhttps://docs.python.org/2/reference/expressions.html#generator-expressions

+0

実際に説明してくれてありがとうございます*なぜ*ジェネレータ式のかっこは省略できます。 – SiHa

2

Pythonのセット。ストリング

>>> address = set(city for city in ["Paris", "Paris", "London","Berlin","Paris","Paris"]) 

>>> print address 
set(['Paris', 'Berlin', 'London']) 

>>> type(address) 
<type 'set'> 
1

(x for x in [1, 2, 3])付きリストの例は、単一の値に反復可能な入力を低減Generator Expressions

あります。

>>> (x for x in [1, 2, 3]) 
<generator object <genexpr> at 0x7f1b23bea8c0> 
>>> type(x for x in [1,2,3]) 
<type 'generator'> 

これはsetクラスのコンストラクタと一致します。

def __init__(self, seq=()): # known special case of set.__init__ 
     """ 
     set() -> new empty set object 
     set(iterable) -> new set object 

     Build an unordered collection of unique elements. 
     # (copied from class doc) 
     """ 

のPython 3がでありセットそのような理解:

{x for x in [1, 2, 3]} 

だから、Pythonの3でもうset(x for x in [1, 2, 3])を必要としません。

関連する問題