Python 函数的可变参数、切片、迭代和列表生成式
1. 函數的可變參數
def fun(*args):print(args)讓一個函數能接受任意個參數,可以定義一個可變參數。可變參數的名字前面有個 * 號,我們可以傳入0個、1個或多個參數給可變參數。Python解釋器會把傳入的一組參數組裝成一個tuple傳遞給可變參數,因此,在函數內部,直接把變量 args 看成一個 tuple 就好了。
2. 切片
L = range(1, 101) # L = [1, 2, 3, ..., 100] print(L[0:3]) # 等同于L[:3],取列表中索引值為0, 1, 2 的元素 print(L[:]) # 從頭到尾,復制一個新的L print(L[::2]) # 也可以有三個參數,第三個參數表示每N個取一個,代表步長把list換成tuple,切片操作完全相同,只是切片的結果也變成了tuple。
倒序切片:記住倒數第一個元素的索引是-1。
L = ['Adam', 'Lisa', 'Bart', 'Paul'] L[-2:] # ['Bart', 'Paul'] L[:-2] # ['Adam', 'Lisa'] L[-3:-1] # ['Lisa', 'Bart'] L[-4:-1:2] # ['Adam', 'Bart']字符串切片:字符串 'xxx’和 Unicode字符串 u’xxx’也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串。
3. 迭代
在Python中,如果給定一個 list 或 tuple,可以通過 for 循環來遍歷這個 list 或 tuple,這種遍歷我們成為迭代(Iteration)。在Python中,迭代是通過 for ... in 來完成的。實際上,Python 的 for 循環不僅可以用在 list 或 tuple上,還可以作用在其他任何可迭代對象上。果一個對象說自己可迭代,那我們就直接用 for 循環去迭代它,可見,迭代是一種抽象的數據操作,它不對迭代對象內部的數據有任何要求。
索引迭代: Python中,迭代永遠是取出元素本身,而非元素的索引。當需要在迭代過程中獲取元素索引時,調用 enumerate() 函數。其實,索引迭代也不是真的按索引訪問,而是由 enumerate() 函數自動把每個元素變成 (index, element) 這樣的tuple,再迭代,就同時獲得了索引和元素本身。
L = ['Baidu', 'Tencent', 'Ali'] for index, name in enumerate(L):print(index + ' - ' + name)zip() 函數:可以把兩個等長的 list 合并為一個:
for index, name in zip([10, 20, 30], ['A', 'B', 'C']): # [(10, 'A'), (20, 'B'), (30, 'C')]print(index + ' - ' +name) # 利用 zip()函數生成新列表進行迭代迭代 dict 的 value 值: dict 對象有一個 values() 方法,這個方法把 dict 轉換成一個包含所有value 的 list,這樣,我們迭代的就是 dict 的每一個 value。還有一個 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一樣。
不過在Python 3.6之后,itervalues() 方法已經被移除。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } for item in d.values():print(item) for item in d.itervalues():print(item)迭代 dict 的 (key, value)值,dict 的 items() 方法把 dict 對象轉換成了包含 tuple 的 list,我們對這個 list 進行迭代,可以同時獲得key 和 value:
for key, value in d.items():print(key, ':', value)4. 列表生成式
為了避免生成復雜列表太過于繁瑣,python 通過一個簡單的列表生成式實現:
[x * x for x in range(1, 11)] # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]加入條件過濾:有了 if 條件,只有 if 判斷為 True 的時候,才把循環的當前元素添加到列表中。
def toUppers(L):return [x.upper() for x in L if isinstance(x, str)] # isinstance(x, str) 判斷x是否為字符串print toUppers(['Hello', 'world', 101])循環嵌套:for循環可以嵌套,因此,在列表生成式中,也可以用多層 for 循環來生成列表。
print [x*100+y*10+z for x in range(1, 10) for y in range(0,10) for z in range(0, 10) if x==z] # 利用 3 層for循環的列表生成式,找出對稱的 3 位數。總結
以上是生活随笔為你收集整理的Python 函数的可变参数、切片、迭代和列表生成式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解析P12证书(vip解析工具)
- 下一篇: 为什么有女子学校没有男子学校