不用for迴圈,迴圈五次,取個隨機值
result = [random.randint(1,100) for x in range(5)]
result = [[random.randint(1,100) for x in range(5)] for y in range(5)]
參考:
Python 的列表解析(list comprehension)和產生器運算式(generator expression)
列表解析:
文法:[expr for iter_var in iterable] 或 [expr for iter_var in iterable if cond_expr]
說明:
第一種文法:首先迭代iterable裡所有內容,每一次迭代,都把iterable裡相應內容放到iter_var中,再在運算式中應用該iter_var的內容,最後用運算式的計算值產生一個列表。
第二種文法:加入了判斷語句,只有滿足條件的內容才把iterable裡相應內容放到iter_var中,再在運算式中應用該iter_var的內容,最後用運算式的計算值產生一個列表。
舉例:
>>> [i + 1 for i in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> [i + 1 for i in range(10) if i % 2]
[2, 4, 6, 8, 10]
產生器運算式:
文法:(expr for iter_var in iterable) 或 (expr for iter_var in iterable if cond_expr)
說 明:列表解析是比較早的Python版本裡就引進的(好像是2.0版本),而產生器運算式則是在2.4中引入的新內容,它和列表解析的文法很像,但是在大資料量處理時,產生器運算式的優勢就體現出來了,因為它的記憶體使用量方式更好,效率更高,它並不建立一個列表,只是返回一個產生器。當然,列表解析並不會被 遺棄。
舉例:
>>> (i + 1 for i in range(10) if i % 2)
<generator object <genexpr> at 0x011DC5D0>
>>> g = (i + 1 for i in range(10) if i % 2)
>>> l = []
>>> for j in g:
l.append(j)
>>> l
[2, 4, 6, 8, 10]
從上面可看出,列表解析和產生器運算式文法雖然很像,但實質上還是有很大不同的。
Python可是很強大很優美很高效很簡潔很有趣的,希望更多的人來認識它。
Some simple generators can be coded succinctly as expressions using a syntax similar to list comprehensions but with parentheses instead of brackets.
These expressions are designed for situations where the generator is used right away by an enclosing function.
Generator expressions are more compact but less versatile than full generator definitions and tend to be more memory friendly than equivalent list comprehensions.
參考:
Python Tutorial
http://home.ixpub.net/space.php?uid=16111523&do=blog&id=404460