我看到的東西,如:Python:set()中的理解是什麼意思?
set(x for x in [1, 2, 3])
我知道x for x in [1, 2, 3]
是理解,但我不能找到有效的語法吧,因爲x for x in [1, 2, 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]
本身是無效的。
call ::= primary "(" [argument_list [","] | comprehension] ")"
comprehension ::= expression comp_for
檢查:
set(x for x in [1, 2, 3])
set
爲primary
,x
是expression
和for x in [1, 2, 3]
是comp_for
它是基於理解創建一個集合。例如:
a = set(x for x in [1, 2, 3])
print(a)
其結果將是一組:
a = set([1, 2, 3])
在您不:
{1, 2, 3}
在上述例子中,它碰巧是邏輯可被簡化完全需要理解
這是一個發電機表達。它們通常由括號包圍,但如果表達式是唯一的參數傳遞給函數調用的括號可以省略:
>>> generator = (x for x in [1, 2, 3])
>>> generator.next()
1
>>> set(generator)
set([2, 3])
發生器對象可以被遍歷時,它們產生的值一個接一個。與在這裏使用列表理解相比,優點是不需要創建中間列表對象(如果存在例如100萬個元素而不是3個則更重要)。
文檔:基於理解https://docs.python.org/2/reference/expressions.html#generator-expressions
感謝您真正解釋*爲什麼*可以省略生成器表達式中的括號。 – SiHa
Python的集合。例如用於處理字符串
>>> address = set(city for city in ["Paris", "Paris", "London","Berlin","Paris","Paris"])
>>> print address
set(['Paris', 'Berlin', 'London'])
>>> type(address)
<type 'set'>
(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]}
所以你不需要再set(x for x in [1, 2, 3])
在的Python 3。
https://docs.python.org/3/reference/expressions。html#generator-expressions – vaultah