day08 集合 檔案處理

2022-07-10 16:36:11 字數 4615 閱讀 6957

集合、list、tuple、dict一樣都可以存放多個值,但是集合主要用於:去重、關係運算

定義:在{}內用逗號分隔開多個元素,集合具備以下三個特點:

1:每個元素必須是不可變型別

2:集合內沒有重複的元素

3:集合內元素無序

s = # 本質 s = set()

ps:

1:列表型別是索引對應值,字典是key對應值,均可以取得單個指定的值,而集合型別既沒有索引也沒有key與值對應,所以無法取得單個的值,而且對於集合來說,主要用於去重與關係元素,根本沒有取出單個指定值這種需求。

注意2:{}既可以用於定義dict,也可以用於定義集合,但是字典內的元素必須是key:value的格式,現在我們想定義乙個空字典和空集合,該如何準確去定義兩者?

d = {} # 預設是空字典

s = set() # 這才是定義空集合

但凡能被for迴圈的遍歷的資料型別(強調:遍歷出的每乙個值都必須為不可變型別)都可以傳給set()轉換成集合型別

s = set([1,2,3,4])

s1 = set((1,2,3,4))

s2 = set()

s3 = set('egon')

print(s,s1,s2,s3)

①關係執行符

有如下兩個集合,pythons是報名python課程的學員名字集合,linuxs是報名linux課程的學員名字集合

(1).交集:取兩個集合的共同部分-->即報名python又報名linux的學生

print(pythons &linuxs)

(2).並集合:兩個集合並到一起-->所有學生的姓名

print(pythons | linuxs)

(3).差集:乙個集合減去另乙個集合共同的部分

只學了python的學生:

print(pythons - linuxs)

只學了linux的學生:

print(linuxs - pythons)

(4).交叉補集/對稱差集:兩個集合互相減然後並到一起,取同時沒有學兩門課程的學生。

print(linuxs^pythons)

(5)值是否相等

print(linuxs == pythons)

false

(6)父集:乙個集合是否包含另外乙個集合

6.1 包含則返回true

print( > )

true

print( >= )

true

6.2 不存在包含關係,則返回false

print( > )

false

print( >= )

false

(7)7.子集

print( < )

true

print( <= )

true

②去重

ps:只能針對不可變型別

集合本身是無序的,去重之後無法保留原來的順序

l=['a','b',1,'a','a']

s = set(l) #將列表轉成集合

print(set(s))

l_new = list(s)#再將集合轉成列表

print(l_new)

[1, 'a', 'b'] #去了重複打亂了順序

③其他操作

1、update()

.>>> s1 =

.>>> s1.update()

.>>> s1

2、add()

.>>> s1 =

.>>> s1.add(6)

.>>> s1

3、刪除

.>>> s1 =

.>>> s1.remove(3)

traceback (most recent call last):

file "", line 1, in

.keyerror: 3

.>>> s1.remove(33)

.>>> s1

.>>> s1.discard(33333)

.>>> s1

.>>> s1.discard('yy')

.>>> s1

.>>> s1.pop()

11.>>> s1

.>>> s1.clear()

.>>> s1

set()

4.copy()

.>>> s1 =

.>>> s1.copy()

5.s1.isdisjoint()

.>>> s1 =

.>>> s2 =

.>>> s1.isdisjoint(s2)

false

6.長度

.>>> s=

.>>> len(s)

3

7.成員運算

.>>> 'c' in s

true

8.迴圈

.>>> for item in s:

... print(item)

...cab

總結:

存多個值,可變,無序

.>>> s1 =

.>>> id(s1)

31828672

.>>> s1.add(4)

.>>> id(s1)

31828672

.>>> s1

檔案是作業系統提供給使用者或者應用程式操作硬碟的一種機制

讀寫檔案----->訪問硬碟

應用程式: open()

作業系統: 開啟檔案

計算機硬體: 硬碟空間

開啟檔案

讀/寫關閉檔案

f=open('a.txt','r',encoding='utf-8') #預設開啟模式就為r

開啟檔案,由應用程式向作業系統發起系統呼叫open(...),作業系統開啟該檔案,對應一塊硬碟空間,並返回乙個檔案物件賦值給乙個變數f

data=f.read()

呼叫檔案物件下的讀/寫方法,會被作業系統轉換為讀/寫硬碟的操作

f.close()

向作業系統發起關閉檔案的請求,**系統資源

開啟乙個檔案包含兩部分資源:應用程式的變數f和作業系統開啟的檔案。在操作完畢乙個檔案時,必須把與該檔案的這兩部分資源全部**,**方法為:

f.close() #**作業系統開啟的檔案資源

del f #**應用程式級的變數

其中del f一定要發生在f.close()之後,否則就會導致作業系統開啟的檔案無法關閉,白白占用資源, 而python自動的垃圾**機制決定了我們無需考慮del f,這就要求我們,在操作完畢檔案後,一定要記住f.close(),雖然我們如此強調,但是大多數讀者還是會不由自主地忘記f.close(),考慮到這一點,python提供了with關鍵字來幫我們管理上下文.

#1、在執行完子**塊後,with 會自動執行f.close()

with open('a.txt','w') as f:

pass

#2、可用with同時開啟多個檔案,用逗號分隔開即可

with open('a.txt','r') as read_f,open('b.txt','w') as write_f:

data = read_f.read()

write_f.write(data)

f = open(...)

是由作業系統開啟檔案,如果開啟的是文字檔案,會涉及到字元編碼問題。

如果沒有為open指定編碼,那麼開啟文字檔案的預設編碼很明顯是作業系統說了算了,作業系統會用自己的預設編碼去開啟檔案,在windows下是gbk,在linux下是utf-8。

這就用到了上節課講的字元編碼的知識:若要保證不亂碼,檔案以什麼方式存的,就要以什麼方式開啟。

f = open('a.txt','r',encoding='utf-8')

day08 集合 檔案處理初解

今日內容 1 集合型別 去重關係運算 型別總結 2 檔案處理 基本使用 with語法 上下文管理 檔案開啟的模式 t 字元編碼 一 集合set 作用 去重 雞肋 1 無法保證順序 2 只能針對不可變元素去重 定義 在 內用逗號分隔開多個元素 1.集合內元素必須是不可變型別 2.集合內元素不能重複 3...

08 集合對映 set

實際上,set這種集合對映我們在前面已經學習關聯關係對映時已經用過了,實體類 實體類都在在資料庫中有對應的表 中有一對多或者多對多的關係,並且我們可以通過某一側訪問到另一側,就是通過在類中設定 set集合並配置set對映來實現的。在hibernate配置中有兩種資料型別,一種是值型別,另一種是實體型...

day 08 檔案管理

2 access 1 建議鎖 檔案鎖的由來 當兩個程序在同一時刻向同乙個檔案中寫入資料時,可能造成資料的交錯和不一致問題 當乙個程序在向檔案中寫入資料的同時,另外乙個程序讀取檔案中資料時可能造成資料的不一致性問題 當兩個程序同時讀取同乙個檔案資料時,可以同時進行 沒有讀寫操作讀取操作寫入操作 讀取o...