在學習python的列表推導式前,我們先學習三個東西:lambda、map、filter
lambda是在一行中編寫乙個函式,但如果這個函式被多次呼叫,則其效能會受到一定的影響,其格式為
函式名 =
lambda 引數1,引數2
:函式體
如
add =
lambda a1,a2:a1 + a2
該lambda表示式的含義與下面這個函式所表達的意思是一樣的
def
add(a1,a2)
:return a1+a2
map函式用於將乙個函式作用於乙個可迭代物件的所有元素,在python3中其返回值是乙個迭代器。
def
double
(x):
return x*
2lis =
list
(range(5
))print
(list
(map
(double, lis)))
# [0, 2, 4, 6, 8]
filter函式用來獲取滿足使用者定義條件的集合中的元素子集,在python3中其返回值是乙個迭代器。
def
odd_number
(x):
return x%2==
1lis =
list
(range(5
))print
(list
(filter
(odd_number, lis)))
# [1, 3]
有時lambda、map、filter聯合使用能帶給我們很大的便利
double =
lambda x:x*
2odd_num =
lambda x:x%2==
1lis =
list
(range(5
))print
(list
(map
(double, lis)))
print
(list
(filter
(odd_num, lis)))
# [0, 2, 4, 6, 8]
#[1, 3]
如上述例子中,運用這三個可以得到很大得便利,但其實還是缺乏了一些靈活性。
其實我們還可以使用更簡單的方法來建立列表,列表推導式
列表推導式是一種簡潔而靈活的方法,它可以利用表示式及其他列表來建立乙個新的列表。它是由乙個方括號構造的,其中的表示式或函式僅在元素滿足某種條件時才應用於列表中的每個元素。
語法
[expression(x)
for x in
list
if optional_condition(x)
]
例子
lis =
list
(range(5
))print
([x*
2for x in lis]
)print
([x for x in lis if x%2==
1])#[0, 2, 4, 6, 8]
#[1, 3]
運用列表推導式來表達上面例子便又簡單了幾分。
python允許反向索引,比如list[-1] == list[len[列表]-1],即列表的最後一位。
我們還可以使用 list[start?step]對列表進行切片 ,其中包含開始元素,不包含結束元素。
如呼叫[1:3]給出的[1, 2]
我們還可以通過list[::-1]來獲得反轉列表。
列表可以使用星號來獲得子列表
如:
lis =
list
(range(5
))a,*b, c = lis
print
(a, b, c)
# 0 [1, 2, 3] 4
其中a取了列表的第一位1,c取了列表的最後一位4,剩下的就都是b的了。
zip函式建立乙個迭代器,用於聚合來自多個列表的元素。可以使用*來解壓它
a =[1
,2,3
]b =[4
,5,6
]c =[4
,5,6
,7,8
]zip1 =
zip(a,b)
zip2 =
zip(a,c)
zip3 =
zip(
*zip1)
# 與 zip 相反,*zip1 可理解為解壓
print
(list
(zip1)
)# [(1, 4), (2, 5), (3, 6)]
print
(list
(zip2)
)#[(1, 4), (2, 5), (3, 6)] # 元素個數與最短的列表一致
print
(list
(zip3)
)# [(1, 2, 3), (4, 5, 6)]
enumerate是乙個經常在for迴圈中使用的自動計數器,因此在for迴圈中不在需要通過counter = 0 和
counter += 1 來建立和初始化計數器變數。
語法
enumerate
(sequence,
[start=0]
)
其中
sequence表示乙個序列、迭代器或其他支援迭代物件。
start表示下標起始位置,預設值為0。
例子
upper =
['a'
,'b'
,'c'
,'d'
,'e'
,'f'
]lower =
['a'
,'b'
,'c'
,'d'
,'e'
,'f'
]for i,
(upper, lower)
inenumerate
(zip
(upper, lower),1
):print
(f': and .'
)# 1: a and a.
# 2: b and b.
# 3: c and c.
# 4: d and d.
# 5: e and e.
# 6: f and f.
for迴圈中的第乙個引數i用來接受enumerate的自動計數器的值,最後乙個數字1代表著從1開始計數,如果不寫的話,則代表從0開始。 第4章深入列表
names libai dufu qingzhao yuanming for name in names print name print n print you are so beautiful for 迴圈注意冒號,縮排,一般要逐個給新變數 none for none in names prin...
python 在列表中,插入列表片段的方法
python 官方簡易文件篇 2 資料結構 下面的演示中會多次用到切片,並且使用list1 len list1 這個式子中,意指從索引位置開始,直到最後。但索引位置是正好是最後一位的下一位,而我嘗試使用更大的數字,仍能成立,所以在切片中的切片數可以是任意正數 0 負數的!但這個切片負值又給我們帶來了...
python 傳入列表和步進值,查到步進值刪除資料
15分 1.返回列表中最後剩下的元素 2.傳入列表,和步進值 隔幾個刪除資料 3.從第乙個元素起,查到步進值就刪掉該元素 4.到結尾後,返回第乙個元素繼續累計查詢 題意 如lt 1,2,3,4,5 從1開始查起,若步進值為2,則應刪除lt 1 然後從3在開始查起 def last item lt,s...