3 python-高級特性

目標:代碼越少越好

1.切片

1).功能:直接選擇list或tuple中的子元素。

2).優點:代替循環,減少代碼量

3).實現:list[首元素位置:尾元素位置:間隔選擇數],tuple(首元素位置:尾元素位置:間隔選擇數),list[1,2,3,4,5]

  • 首元素位置:需要選擇的首元素索引值,當從0開始時可忽略即,list[:尾元素位置:間隔選擇數]
  • 尾元素位置:需要選擇的尾元素索引值,實際選擇不包括尾元素索引值即,list[1:4],一共選擇4-1=3個元素,2,3,4
  • 間隔選擇數:格幾個選擇一個元素,例如,list[::2],結果爲1,3,5,其中list[:]表示選擇全部元素
>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']>>> L[0:3]
['Michael', 'Sarah', 'Tracy',]>>> L[-2:]          #也可以倒着索引  倒數第一個索引爲-1
['Bob', 'Jack']
>>> L[-2:-1]
['Bob']
>>> L[::2]          #選擇索引值爲偶數的
['Michael', 'Tracy','Jack']

2.迭代

1).定義:如果給定一個list或tuple,通過for循環來遍歷這個list或tuple,這種遍歷我們稱爲迭代(Iteration)

2).優點:沒有索引也可以迭代,list、tuple、dict、set都可以,連字符串也行

3).實現:

  • list: 迭代值和索引均可,和tuple、set類似
>>> list = ['A', 'B', 'C']
>>> for value in list...     print(value)
...
ABC>>> for i, value in enumerate(['A', 'B', 'C']):   #實現下標循環
...     print(i, value)
...
0 A
1 B
2 C
  • dict:迭代key、value均可。key:for key in d,value:for value in d.values(),同時迭代key和value:for k, v in d.items()
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
...     print(key)
...
a
c
b
  • 判斷是否可迭代:通過collections模塊的Iterable類型判斷:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數是否可迭代
False

3.列表生成式

1).功能:可以快速生成list,可以通過一個list推導出另一個list,而代碼卻十分簡潔

2).實現:條件循環和多層循環

  • 條件循環:要生成的元素x * x放到前面,後面跟for循環,循環後面加if判斷 if和x*x都可以省
#轉成小寫字母>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
# -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None] #非全是字母,可根據isinstance判斷
L2 = [s.lower() for s in L1 if isinstance(s,str)]
# 測試:
print(L2)
if L2 == ['hello', 'world', 'apple']:
    print('測試通過!')
else:
    print('測試失敗!')
>>> [x * x for x in range(1, 11) if x % 2 == 0]    
[4, 16, 36, 64, 100]    列表生成式

#等價於下面代碼
>>> L = []
>>> for x in range(1, 11):
...    if x%2 == 0
...        L.append(x * x)
...
>>> L
[4, 16, 36, 64, 100] >>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
  • 多層循環: 可以實現多層循環,也可以循環多個變量
#兩層循環,實現全排列>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

4.生成器

1).定義:當生成很多元素時,列表生成式佔用空間大,如果僅僅需要訪問前幾個元素,後面的空間就浪費了,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出後續的元素呢?這樣就不必創建完整的list,從而節省大量的空間。在Python中,這種一邊循環一邊計算的機制,稱爲生成器:generator。

2).優點:減少空間佔用,節約空間。

3).實現:


5.迭代器



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章