高階特性
print(list(range(1, 100, 2)))
切片
#切片 字串,物件,陣列都可以使用
print(list(range(1, 100, 2)))
list1 = ['michael', 'sarah', 'tracy', 'bob', 'jack']
# 取陣列前n個元素 0 - (n-1), 取出前3個元素,如果第乙個索引是0,還可以省略:
print(list1[:3])
print(list1[1:3])
print(list1[-2:-1])
list2 = list(range(1, 100))
# 取前10個,每隔2個取乙個
print(list2[:10:2])
# 所有數,戈2個取乙個
print(list2[::2])
# 這樣會直接複製乙個list
list3 = list2[:]
# print(list3)
# 去除左右空格
def trim (s):
while s[:1] == ' ':
s = s[1:]
trim(s)
while s[-1:] == ' ':
s = s[0:-1]
trim(s)
return s
迭代 for in
#迭代 for in
# 物件,陣列,字串都可以
# 物件 如果要同時迭代key和value,可以用for k, v in d.items() , 如果要迭代value,可以用for value in d.values()
# 陣列,如果想要下標,可以使用enumerate函式: for i, value in enumerate(['a', 'b', 'c']):
# 判斷是否可以迭代
from collections import iterable
isinstance('abc', iterable) # str是否可迭代
isinstance([1,2,3], iterable) # list是否可迭代
isinstance(123, iterable) # 整數是否可迭代
# 迭代陣列 返回tuple
for x, y in [(1, 1), (2, 4), (3, 9)]:
print(x, y)
# 查詢最大最小的值
def findminandmax(l):
if not l:
return(none, none)
max = min = l[0]
for n in l:
if max < n:
max = n
if min > n:
min = n
return (min, max)
列表生成式
# 生成[1x1, 2x2, 3x3, ..., 10x10]怎麼做
# list4 =
# for x in range(1, 11):
# 或者
list4 = [ x * x for x in range(1, 11)]
print(list4)
# 兩層迴圈
print([m + n for m in 'abc' for n in 'xyz'])
# for迴圈後面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
#[x * x for x in range(1, 11) if x % 2 == 0]
# 列出當前目錄下所有檔案和目錄
# d =
# for k, v in d.items():
# print(k, '=', v)
# [k + '=' + v for k, v in d.items()] 生成陣列
# [s.lower() for s in l]
import os
print([d for d in os.listdir('.')])
# 請修改列表生成式,通過新增if語句保證列表生成式能正確地執行:
list6 = [x.lower() for x in list5 if isinstance(x, str)]
print(list6)
生成器 generator
# 生成器 generator。
# 如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊計算的機制,稱為生成器
g1 = (x * x for x in range(10))
print(g1)
print(next(g1))
print(next(g1))
# 正確的方式,應該使用for迴圈
for n in g1:
print(n)
# # 斐波拉契數列 generator函式
def fib(max):
n, a, b = 0, 0, 1
while n < max:
#print(b)
yield b
# 賦值語句:
a, b = b, a + b
n = n + 1
return 'done'
# 普通函式直接呼叫
# fib(6)
# 生成器函式 for 迴圈, 不然只能通過next函式一次一次的呼叫,如果呼叫次數多了,會報錯
for n in fib(6):
print(n)
# 楊輝三角
def ********s(n):
l = [1]
while true:
yield l
# 第一次中間是空陣列
l = [1] + [l[x] + l[x + 1] for x in range(len(l) - 1)] + [1]
if len(l) > n:
break
for linevalue in ********s(10):
print(linevalue)
迭代器
# 迭代器
# for迴圈的資料型別有以下幾種:
# 一類是集合資料型別,如list、tuple、dict、set、str等;
# 一類是generator,包括生成器和帶yield的generator function。
# 這些可以直接作用於for迴圈的物件統稱為可迭代物件:iterable。
# 可以使用isinstance()判斷乙個物件是否是iterable 列舉物件:
from collections import iterable, iterator
print(isinstance(, iterable))
isinstance({}, iterable)
isinstance('abc', iterable)
print(isinstance((x for x in range(10)), iterable))
# # 可以使用isinstance()判斷乙個物件是否是iterator物件:
print(isinstance((x for x in range(10)), iterator)) # true
print(isinstance(, iterator)) # flase
# 但是可以通過iter()函式轉為iterator
print(isinstance(iter(), iterator))
# python的for迴圈本質上就是通過不斷呼叫next()函式實現的
# 首先獲得iterator物件:
# it = iter([1, 2, 3, 4, 5])
# # 迴圈:
# while true:
# try:
# # 獲得下乙個值:
# x = next(it)
# except stopiteration:
# # 遇到stopiteration就退出迴圈
# break
# 等同於
# for x in [1, 2, 3, 4, 5]:
# pass
python學習 高階特性
高階函式 可以使用函式作為引數的函式 def f func sorted 對列表排序,有乙個名為key的引數 指定key為abs,根據l的絕對值排序sorted l,key abs filter 對序列過濾 filter a,b a為函式,b為被處理的資料列表,a會對b中的每個元素判斷,結果為真擇保...
python學習之高階特性
切片 對列表 元組 字串 字典取中間的一部分,在c中一般是通過for迴圈拷貝 memcpy strcat等操作。而python提供了更方便的切片操作符 m n 前閉後開,如果從0取m可以省略 如果只用 就是切整片 也可以從尾端切片 m 前後的閉區間。列表生成式 list range m,n 構造乙個...
Python高階特性
l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...