python基礎教程Day05

2021-10-09 20:45:53 字數 4347 閱讀 1892

list的使用案例1.判斷 list 內有無重複元素

set()函式建立乙個無序不重複元素集,可進行關係測試,刪除重複資料,還可以計算交集、差集、並集等。

// a code block

a='good'

b='morning'

print(set(a))

print(set(b))

#輸出刪除了重複的元素

#輸出刪除了重複的元素

var foo = 'bar';

判斷有無重複元素

// an highlighted block

def is_duplicated

(lst)

:return

len(lst)

!=len

(set

(lst))a=

[1,2

,3,1

,1,3

,4,5

]print

(is_duplicated

(a)) #結果為true則有重複元素,為false則無

true #為true,有重複元素

var foo =

'bar'

;

列表反轉

一行**實現列表反轉,非常簡潔。

[::-1],這是切片的操作。

[::-1] 生成逆向索引(負號表示逆向),步長為 1 的切片。

所以,最後乙個元素一直數到第乙個元素。這樣,不正好實現列表反轉嗎?

// a code block

def is_duplicated(lst):

return lst[::-1]

a=[-1,2,-3,4,6,7,9]

print(is_duplicated(a))

#[9, 7, 6, 4, -3, 2, -1] 輸出反轉的列表

var foo = 'bar';

3. 找出列表中的所有重複元素

遍歷列表,如果出現次數大於 1,且不在返回列表 ret 中,則新增到 ret 中。

滿足 x not in ret,則表明 x 不在列表中。

python count() 方法用於統計字串裡某個字元出現的次數

// a code block

def lucky(lst):

ret =

for x in lst:

if lst.count(x) > 1 and x not in ret: # 找到乙個新的重複元素,x not in ret 的作用是不讓重複元素加進來

return ret

r=lucky([1, 2, 3, 4, 3, 2])

print(r) #呼叫 lucky:

var foo = 'bar';

結果

// an highlighted block2,

3var foo =

'bar'

;

4. 斐波那契數列

斐波那契數列第

一、二個元素都為 1,第三個元素等於前兩個元素和,依次類推。

普通實現版本

// a code block

def fibonacci(n):

if n <= 1:

return [1]

fib = [1,1]

while len(fib) < n:

return fib

r = fibonacci(5)

print(r) #呼叫 fibonacci:

var foo = 'bar';

結果

// an highlighted block[1

,1,2

,3,5

]var foo =

'bar'

;

這不是高效的實現,使用生成器更節省記憶體。

生成器版本

return:在程式函式中返回某個值,返回之後函式不在繼續執行,徹底結束。

yield: 帶有yield的函式是乙個迭代器,函式返回某個值時,會停留在某個位置,返回函式值後,會在前面停留的位置繼續執行,直到程式結束

使用 python 的生成器,保證**簡潔的同時,還能節省記憶體:

// a code block

def fibonacci(n):

a,b=1,1

for _ in range(n):

yield a #遇到 yield 返回,下次再進入函式體時,從 yield 的下一句開始執行。

a,b=b,a+b

r=list(fibonacci(5))

print(r)

var foo = 'bar';

結果

// an highlighted block[1

,1,2

,3,5

]var foo =

'bar'

;

lambda 表示式

匿名函式的定義

在 python 裡有兩類函式:

lambda argument_list: expression

lucky=lambda x:x*x 就比如這個式子只有lambda是不變的,其它的在格式的要就下就可以隨便賦值,定義引數.

例子

// a code block

#1def sqr(x):

return x ** 2

y = [sqr(x) for x in range(10)]

print(y)

#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

#2lbd_sqr = lambda x: x ** 2

y = [lbd_sqr(x) for x in range(10)]

print(y)

#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

var foo = 'bar';

lambda的其他用法

// a code block

sumary = lambda arg1, arg2: arg1 + arg2

print(sumary(10, 20)) # 30

func = lambda *args: sum(args)

print(func(1, 2, 3, 4, 5)) # 15

var foo = 'bar';

5. 樣本抽樣

內建 random 模組中,有乙個 sample 函式,實現「抽樣」功能。

下面例子從 100 個樣本中,隨機抽樣 10 個。

首先,使用列表生成式,建立長度為 100 的列表 lst;

然後,sample 抽樣 10 個樣本。

// a code block

from random import randint,sample

lst = [randint(0,50) for _ in range(100)] #生成隨機整數

print(lst[:6]) #[36, 19, 3, 25, 39, 18]

lst_sample = sample(lst,10) #從lst中抽樣10個元素

print(lst_sample) #[46, 29, 36, 44, 31, 26, 40, 8, 40, 36]

var foo = 'bar';

6. 重洗資料集

內建 random 中的 shuffle 函式,能沖洗資料。

值得注意,shuffle 是對輸入列表就地(in place)洗牌,節省儲存空間。

// a code block

from random import shuffle,randint

lst = [randint(0,50) for _ in range(100)]

shuffle(lst) #重洗資料

print(lst[:6]) #[50, 49, 21, 41, 27, 3]

var foo = 'bar';

希望大家多手動敲敲**,找找 python 編碼的樂趣,為後面的python學習打下堅實的基礎。

Python學習筆記day05

高階函式 課後練習 不可變的資料型別一定可雜湊 hash 內建函式可以判斷某個型別是否可雜湊 s1 s2 s3 s4 print s1,s2,s3的交集 s1.intersection s2,s3 print s1,s2,s3的交集 s1 s2 s3 print s1,s2,s3的並集 s1.uni...

從零開始的python爬蟲教程 Day05

beautiful soup 是乙個可以從html或xml檔案中提取資料的python庫.它能夠通過你喜歡的轉換器實現慣用的文件導航,查詢,修改文件的方式.beautiful soup會幫你節省數小時甚至數天的工作時間.摘自beautifulsoup中文文件 和lxml庫一樣,beautifulso...

python基礎教程Day06

每個人的生活和工作都充滿了迴圈,很多時候,迴圈意味著重複和枯燥。比如你要手動給300個人發資訊,比如她要一遍一遍地給不認真的人費勁口舌解釋同樣的事情,又比如他一成不變 如同一潭死水般的生活。一成不變的生活終歸需要你自己去打破迴圈,但工作的事,就大可讓計算機幫一幫我們了。與人類不同,計算機不怕苦也不怕...