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個人發資訊,比如她要一遍一遍地給不認真的人費勁口舌解釋同樣的事情,又比如他一成不變 如同一潭死水般的生活。一成不變的生活終歸需要你自己去打破迴圈,但工作的事,就大可讓計算機幫一幫我們了。與人類不同,計算機不怕苦也不怕...