python學習 基礎 高階特性

2021-09-07 18:06:17 字數 4230 閱讀 4121

高階特性

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...