如果要生成list [1,2,3,4,5,6,7,8,9,10] 可以使用list(range(1,11))
但是如果要生成x*x
首先可以通過迴圈來新增元素到列表後部,但是較為繁瑣
第二種方法則是使用列表生成式來生成list
>>
>
[x * x for x in
range(1
,11)]
[1,4
,9,16
,25,36
,49,64
,81,100
]
for 後面還可以加if判斷,從而生成偶數的平方
>>
>
[x * x for x in
range(1
,11)if x %2==
0][4
,16,36
,64,100
]
還可以使用兩層迴圈,分別迭代乙個引數,然後進行運算,這種方式可以用於生成全排列
>>
>
[m + n for m in
'abc'
for n in
'xyz'][
'ax'
,'ay'
,'az'
,'bx'
,'by'
,'bz'
,'cx'
,'cy'
,'cz'
]
運用列表生成式,可以寫出非常簡潔的**。例如,列出當前目錄下的所有檔案和目錄名,可以通過一行**實現:
>>
>
import os # 匯入os模組,模組的概念後面講到
>>
>
[d for d in os.listdir(
'.')
]# os.listdir可以列出檔案和目錄
['.emacs.d'
,'.ssh'
,'.trash'
,'adlm',,
'desktop'
,'documents'
,'downloads'
,'library'
,'movies'
,'music'
,'pictures'
,'public'
,'virtualbox vms'
,'workspace'
,'xcode'
]
for迴圈其實可以同時使用兩個甚至多個變數,比如dict的items()可以同時迭代key和value:
>>
> d =
>>
>
for k, v in d.items():
...print
(k,'='
, v)..
.y = b
x = a
z = c
因此,列表生成式也可以使用兩個變數來生成list:
>>
> d =
>>
>
[k +
'='+ v for k, v in d.items()]
['y=b'
,'x=a'
,'z=c'
]
最後把乙個list中所有的字串變成小寫:
>>
> l =
['hello'
,'world'
,'ibm',]
[s.lower(
)for s in l]
['hello'
,'world'
,'ibm'
,]
對於if, 當if放在 列表生成式的for的後面時,表示的是乙個篩選條件不能帶else,而當if放在前面時,則表示的是乙個 表示式,必須根據x計算出乙個結果,而對於奇數,無法計算結果,所以需要加乙個else
>>
>
[x if x %2==
0for x in
range(1
,11)]
file ""
, line 1
[x if x %2==
0for x in
range(1
,11)]
^syntaxerror: invalid syntax
>>
>
[x if x %2==
0else
-x for x in
range(1
,11)]
[-1,
2,-3
,4,-
5,6,
-7,8
,-9,
10]
如果list中既包含字串,又包含整數,由於非字串型別沒有lower()方法,所以列表生成式會報錯:
>>
> l =
['hello'
,'world',18
,,none
]>>
>
[s.lower(
)for s in l]
traceback (most recent call last)
: file ""
, line 1,in
file ""
, line 1,in
attributeerror:
'int'
object has no attribute 'lower'
使用內建的isinstance函式可以判斷乙個變數是不是字串:
>>
> x =
'abc'
>>
> y =
123>>
>
isinstance
(x,str
)true
>>
>
isinstance
(y,str
)false
請修改列表生成式,通過新增if語句保證列表生成式能正確地執行:
# -*- coding: utf-8 -*-
l1 =
['hello'
,'world',18
,,none
]
l2 =
[x.lower(
)for x in l1 if
isinstance
(x,str
)]```
```python
# 測試:
print
(l2)
if l2 ==
['hello'
,'world',]
:print
('測試通過!'
)else
:print
('測試失敗!'
)
記住,函式後面一定要記得加括號,一定 python初學第五天 高階特性之切片
切片就是按位置取出 乙個list或者tuple 的一部分 l michael sarah tracy bob jack l 0 3 michael sarah tracy 切片操作 l 0 n 指從取出前n個元素,即從索引為0 到 n 1 的元素,不包括n,在切片操作中 只取到索引為 n 1的元素,...
初學Python第五天
繼上次10.3賦值運算子之後 4 位運算子 定義 把數字看做二進位制進行計算的運算子。例如 1 按位 與 運算子 只要兩個對應的二進位制位有乙個為0,則該位結果為0,否則為1 60 13 輸出結果12,二進位制解釋 00001100。2 按位 或 運算子 只要兩個對應的二進位制位有乙個為1,則該位結...
2020 3 15初學python第五天
字典dict 不是序列,用大括號括起來,體現對映關係,由鍵和值組成。如 訪問字典的方法 keys 返回字典所有的鍵 values 返回字典所有的值 items 把每乙個項 剪 值 以元組的形式列印出來 clear 清空乙個字典 update 更新字典 等 集合set 用大括號括起來,不反映對映關係,...