day3-Python集合、函數、文件操作。

来源:http://www.cnblogs.com/evilliu/archive/2016/05/26/5525694.html
-Advertisement-
Play Games

本節大綱: 一:在執行list()函數或者dict()函數首先是調用list()函數或者dict()方法會自動調用該函數的__init__方法進行數據的初始化,list()函數通過一個可迭代的對象,用for迴圈進行遍歷插值。 上述的過程:首先list()函數調用本身的__init__方法進行數據的初 ...


本節大綱:

 

一:在執行list()函數或者dict()函數首先是調用list()函數或者dict()方法會自動調用該函數的__init__方法進行數據的初始化,list()函數通過一個可迭代的對象,用for迴圈進行遍歷插值。

list_test=list((1,2,3,))
print(list_test)
[1, 2, 3]

 上述的過程:首先list()函數調用本身的__init__方法進行數據的初始化,通過for迴圈,把元組(1,2,3,) 遍歷插入列表[1,2,3,]

二:集合

集合是無序數據類型,元素不可以重合。如果集合內元素重覆會自動去重。用大括弧表示和字典表示一樣,字典是無序的數據類型,但是key-value的映射。

1 set_a=set([1,2,2,3,])
2 print(set_a)
3 
4 {1, 2, 3}

可以通過內部函數set()對集合進行轉換。字典、字元串、列表都可以轉換成集合。

1 set_b=set({'name':'evil',})
2 set_c=set('evil')
3 set_d=set([1,2,3,])
4 print(set_b,set_c,set_d)
5 
6 {'name'} {'i', 'l', 'e', 'v'} {1, 2, 3}

1、操作集合

 1)add()函數。添加元素給集合。

1 s_tets=set()
2 s_tets.add(456)
3 s_tets.add(456)
4 s_tets.add(456)
5 print(s_tets)
6 {456}

應用場景:爬蟲。在返回url保存的時候可以用集合操作,預設去除重覆的元素。

2)difference()函數。比如a.difference(b)表示a存在元素b不存在元素。但是a和b本身的集合不發生改變。

1 s1_testa={1,2,3,}
2 s2_testb={2,5,6,}
3 print(s1_testa.difference(s2_testb))
4 print(s2_testb.difference(s1_testa))
5 print(s2_testb,s1_testa)
6 
7 {1, 3}
8 {5, 6}
9 {2, 5, 6} {1, 2, 3}
3、symmetric_difference()函數,比如a.symmetric_difference(b)表示a和b集合去掉交集部分的結合。並不能改變集合a和b的值。
s1_testa={1,2,3,}
s2_testb={2,5,6,}
print(s1_testa.symmetric_difference(s2_testb))
print(s2_testb,s1_testa)
{1, 3, 5, 6}
{2, 5, 6} {1, 2, 3}
3)上述的操作不能修改原集合的值。如果想修改原集合的值。用如下函數:a.difference_update(b)函數。會修改集合a的值。b值不變。a值會變成。a存在的元素且b不存在的元素的值。
1 set_a={1,2,3,4,}
2 set_b={'c',6,3,5,}
3 set_a.difference_update(set_b)
4 print(set_a)
5 print(set_b)
6 {1, 2, 4}
7 {'c', 3, 5, 6}
4)同樣a.symmetric_difference_update(b)函數也會修改a的值,使a的值變為,a、b集合的去除公共元素的集合。
1 set_a={1,2,3,4,}
2 set_b={'c',6,3,5,}
3 set_a.symmetric_difference_update(set_b)
4 print(set_a)
5 print(set_b)
6 {1, 2, 4, 5, 6, 'c'}
7 {3, 5, 6, 'c'}

5)刪除集合指定元素。discard()函數。如果該元素不存在不會報錯。

 

1 set_a={1,2,3,4,}
2 set_a.discard(1)
3 print(set_a)
4 set_a.discard(111)
5 print(set_a)
6 {2, 3, 4}
7 {2, 3, 4}

 

同樣也可以用remove()函數,但是不存在元素會報錯。KeyError: 111

 1 set_a={1,2,3,4,}
 2 set_a.remove(111)
 3 print(set_a)
 4    set_a.remove(111)
 5 KeyError: 111
 6 
 7 set_a={1,2,3,4,}
 8 set_a.remove(4)
 9 print(set_a)
10 {1, 2, 3}

也可以用pop()函數刪除元素。但是隨即刪除一個元素。

1 set_a={1,2,3,4,5,6,7,8}
2 set_a.pop()
3 print(set_a)
4 
5 {2, 3, 4, 5, 6, 7, 8}

6)批量添加元素。用update()函數。通過for迴圈對迭代的對象(比如說列表,字元串,字典的keys以及字典的value值),進行add()操作添加。

 1 1 set_a=set()
 2 2 list_a=[1,2,3,4,5,4]
 3 3 set_a.update(list_a)
 4 4 print(set_a)
 5 5 {1, 2, 3, 4, 5}
 6 
 7 set_a=set()
 8 set_b=set()
 9 list_a={'name':'evil','age':22}
10 list_b={'name':'evil','age':22}
11 set_a.update(list_a)##預設對key值進行迭代。
12 print(set_a)
13 set_b.update(list_b.values())
14 print(set_b)
15 {'name', 'age'}
16 {'evil', 22}

7)當我們在執行一些列表或者其他操作的時候,會調用list()函數的一些方法。比如:

1 list_a=[1,2,3] ##調用list的__init__方法
2 print(list_a[0])##調用list的__getitem__方法
3 list_a[0]=44##調用list的__setitem__方法
4 del list_a[2]##調用list的__delitem__方法

 

8)在寫列表或者字典、集合、元組的時候,進行最後元素加個逗號,在以後django學習的過程中不加逗號有時候會報錯。

1 list_a=[1,2,3,]
2 dict_a={'a':2,'b':3,}
3 tuple_a=(1,2,3,)
9)集合的並集、交集。

交集函數:a.intersection(b)和a.intersection_update(b)前一個函數不改變原先集合(a,b)的值,後一個更新被交集的集合(a)。

 1 s1_testa={1,2,3,}
 2 s2_testb={2,5,6,}
 3 s3=s1_testa.intersection(s2_testb)
 4 print(s3,s1_testa,s2_testb)
 5 {2} {1, 2, 3} {2, 5, 6}
 6 s1_testa={1,2,3,}
 7 s2_testb={2,5,6,}
 8 s1_testa.intersection_update(s2_testb)
 9 print(s1_testa,s2_testb)
10 {2} {2, 5, 6}

並集函數:a.union(b)

1 s1_testa={1,2,3,}
2 s2_testb={2,5,6,}
3 s3=s1_testa.union(s2_testb)
4 print(s3,s1_testa,s2_testb)
5 {1, 2, 3, 5, 6} {1, 2, 3} {2, 5, 6}

10)練習:

 在cmdb日常資產管理的時候,日常伺服器檢測硬體信息收集中,如果一個伺服器4個記憶體插槽,#1、#2、#4插槽分別插,4G、8G、16G。如果現在變化#1插槽變為16G,#2不變,3#插槽插4G的,#4不插。該如何更新信息呢?

1、該刪除那個元素?

2、該更新那個元素?

3、那個元素變了,需要更新?

 1 dict_old={
 2     '#1':4,
 3     '#2':8,
 4     '#4':16,
 5 }
 6 dict_new={
 7     '#1':4,
 8     '#2':8,
 9     '#3':4,
10 }

答案:

 1 set_old=set(dict_old.keys())##生成keys值得集合
 2 set_new=set(dict_new.keys())
 3 del_item=set_old.difference(set_new)##old有的new沒有的
 4 print('delete item %s'%del_item)
 5 up_item=set_new.difference(set_old)##new有的old沒有
 6 print('add item %s'%up_item)
 7 a=set_old.intersection(set_new)## old和new的集合
 8 for i in a:
 9     if dict_new[i]!=dict_old[i]:
10         print('update item: %s'%i)##交集的元素value值不相當,需要更新的。

 三:函數:函數組成:

def functionname(parameter):###由關鍵字def進行定義,然後函數名字(functionname)和函數參數。

 #function description ###函數的描述,作用;參數作用;

  function body ##函數體,執行代碼

 return value## 函數返回值。預設值是None。

 以下是發郵件代碼:

 1 def sendmail():
 2     try:
 3         import smtplib
 4         from email.mime.text import MIMEText
 5         from email.utils import formataddr
 6         msg = MIMEText('郵件內容', 'plain', 'utf-8')
 7         msg['From'] = formataddr(["xxx",'xx@126.com'])
 8         msg['To'] = formataddr(["走人",'xx@qq.com'])
 9         msg['Subject'] = "主題"
10 
11         server = smtplib.SMTP("smtp.126.com", 25)
12         server.login("username", "password")
13         server.sendmail('xxx@126.com', ['xxx@qq.com',], msg.as_string())
14         server.quit()
15     except:
16         # 發送失敗
17         return "失敗"
18     else:
19         # 發送成功
20         return "cc"
21 
22 ret = sendmail()
23 print(ret)
24 if ret == "cc":
25     print('發送成功')
26 else:
27     print("發送失敗")

 執行順序:

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 二叉樹的鏈式存儲 1.1 鏈式存儲 順序存儲對空間利用率較低,所以,二叉樹一般採用鏈式存儲結構,用一個鏈表來存儲一顆二叉樹。二叉鏈表至少包含3個域:數據域data,左指針域lchild和右指針域rchild,如果再加上一個指向雙親結點的指針就變成了三叉鏈表。 二叉樹的鏈式存儲結構如下: 根據完全 ...
  • C/C++ 預處理元編程 從一個問題開始 以下代碼存在結構性重覆,如何消除? ~~~cpp // EventId.h enum EventId { setupEventId = 0x4001, cfgEventId, recfgEventId, releaseEventId // ... }; ~~ ...
  • I am using `&`: why isn't the process running in the background? No problem. We won't show you that ad again. Why didn't you like it? Uninteresting Mi ...
  • 1.安裝方法1:Mac電腦上面安裝很簡單,直接下載需要的版本解壓即可: 下載網址 https://www.mongodb.com/download-center?jmp=nav#community 方法2: brew install mongodb 2. mongodb 數據預設存在/data/db ...
  • 上篇對python中的字元串進行了列舉和簡單說明,但這些方法太多,逐一背下效率實在太低,下麵我來對這些方法安裝其功能進行總結: 1.字母大小寫相關(中文無效) 1.1 S.upper() -> string 返回一個字母全部大寫的副本 1.2 S.lower() -> string 返回一個字母全是 ...
  • 當我們創建一個集合以後,可以直接使用system.out.println()來列印這個集合,但是,我們需要可以對每個元素進行操作,所以,這裡需要使用迭代器來遍歷集合 迭代器其實就是集合取出元素的方式 調用List對象的iterator()方法,得到Iterator對象,這個類是個介面類型,因此可以知 ...
  • 當今的技術領域,開發者人數最為之多的群體便是web領域,與之相關崗位的包括前端工程師,後臺工程師,移動端開發工程師等等。然而由於受時代浮躁氛圍的影響,許多開發者對最為基礎的HTTP協議都不甚瞭解,這也正是本篇文章的目的--簡單總結一下 瞭解HTTP協議之前你需要掌握的一些基礎知識,基本術語等等。 基 ...
  • 今天主要內容是線性回歸的介紹 原則:在進行任何正式分析之前,先要對數據進行可視化分析,看看直觀效果。 當沒有任何其他附加信息的情況下,對一個變數的最佳假設也是最基本的假設,就是其均值。(前提是使用平方誤差作為衡量準則時) 第二層信息就是可以被利用的二元或多元區分型的信息,這類信息可以輔助我們的預測。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...