列表生成式
1生成列表
要生成list [1, 2, 3, 4,5, 6, 7, 8, 9, 10]
,我們可以用
range(1, 11)
:>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成
[1x1, 2x2, 3x3,..., 10x10]
怎麼做?方法一是迴圈:
>>> l =
>>> for x in range(1, 11):
...
>>> l
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是迴圈太繁瑣,而列表生成式則可以用一行語句代替迴圈生成上面的
list
:>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
這種寫法就是
python
特有的列表生成式。利用列表生成式,可以以非常簡潔的**生成
list
。寫列表生成式時,把要生成的元素
x * x
放到前面,後面跟
for
迴圈,就可以把
list
建立出來,十分有用,多寫幾次,很快就可以熟悉這種語法。任務
請利用列表生成式生成列表
[1x2, 3x4, 5x6,7x8, ..., 99x100]
range(1, 100, 2)
可以生成
list [1, 3, 5, 7, 9,...]
?不會了怎麼辦
把每次迴圈的
x 變成列表中的元素
x * (x + 1)
參考**
:
print [x * (x + 1) for x in range(1,100, 2)]
2複雜表示式
使用for
迴圈的迭代不僅可以迭代普通的
list
,還可以迭代
dict
。假設有如下的
dict
:d =
完全可以通過乙個複雜的列表生成式把它變成乙個
html
**:tds =['%s
%s'
%(name, score)
forname, score
ind.iteritems()]
print''
print'name
score'
print'\n'.join(tds)
print''
注:字串可以通過
% 進行格式化,用指定的引數替代%s
。字串的
join()
方法可以把乙個
list
拼接成乙個字串。
把列印出來的結果儲存為乙個
html
檔案,就可以在瀏覽器中看到效果了:
name
score
lisa85
adam95
bart59
3條件過濾
列表生成式的
for迴圈後面還可以加上
if 判斷。例如:
>>> [x * x
forx
inrange(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
如果我們只想要偶數的平方,不改動
range()
的情況下,可以加上
if 來篩選:
>>> [x * x
forx
inrange(1, 11)
ifx % 2 == 0]
[4, 16, 36, 64, 100] 有了
if 條件,只有
if 判斷為
true
的時候,才把迴圈的當前元素新增到列表中。任務
請編寫乙個函式,它接受乙個
list
,然後把
list
中的所有字串變成大寫後返回,非字串元素將被忽略。
1. isinstance(x, str)
可以判斷變數
x 是否是字串;
2. 字串的
upper()
方法可以返回大寫的字母。
4多層表示式
for迴圈可以巢狀,因此,在列表生成式中,也可以用多層
for迴圈來生成列表。
對於字串
'abc'
和'123'
,可以使用兩層迴圈,生成全排列:
>>> [m + n
form
in'abc'
forn
in'123']
['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
翻譯成迴圈**就像下面這樣:
l =
form in
'abc'
:for
n in
'123':
任務 利用3
層for
迴圈的列表生成式,找出對稱的
3 位數。例如,
121
就是對稱數,因為從右到左倒過來還是
121。
?不會了怎麼辦
百位的迴圈從
1-9,十位和個位的迴圈從
0-9。
參考**
:
print [100 * n1+ 10 * n2 + n3 for n1 in range(1, 10) for n2 in range(10) for n3 in range(10)if n1==n3]
列表生成式
列表生成式即list comprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。舉個例子,要生成list 1,2,3,4,5,6,7,8,9,10 可以用list range 1,11 list range 1,11 1,2,3,4,5,6,7,8,9,10 但...
列表生成式
列表生成式,是 python 內建的一種極其強大的生成list的表示式。如果要生成乙個列表,可以用range 1,10 range 1,4 1,2,3 生成 1 1 2 2 3 3 10 10 怎麼做呢?可以使用迴圈 l for x in range 1,10 l 1,4,9,16,25,36,49...
列表生成式
coding utf 8 列表生成式是快速生成乙個list列表的一種快捷方式。my list for x in xrange 1,11 res x x print my list 生成式寫法 x x for迴圈遍歷出來的值進行的邏輯運算 for x in xrange for迴圈表示式 res x ...