【Python】 list dict str

list & dict & str

  這三種類型是python中最常用的幾種數據類型。他們都是序列的一種

■  序列通用操作

  1. 分片

  ? s[a:b] 返回序列s中從s[a]到s[b-1]的片段。注意s[0:0]是空集而不是s[0]

  ? s[a:b:c]  加入第三個參數以設置取樣步長。可以設置成負數來從右向左取樣

  2. 加減乘除

  ? [None] *2 => [None,None]

  *? 注意,這種列表直接乘以數字的做法是淺拷貝一個自身,然后再extend進去。由于是淺拷貝,所以存在著可變對象這樣初始化可能會出現問題。比如:

  a = [{}] * 3 這樣初始化變量a后。表面上看a是一個由三個字典組成的列表,但是實際上,a[0]['key'] = 'value'之后,a的值會變成[{'key': 'value'},{'key': 'value'},{'key': 'value'}],即三個字典實際上指向的是同一個對象,導致變化始終同步。

  3. 一些內建函數的操作

   len(s),max(s),min(s)等

?

■  list

  對于list類型,從數據結構層面上的分析記錄在了“線性表的順序表”中,在這不做展開。這里主要說明一下常用的list方法

  對于列表ls

  賦值  只要不越界,就可以進行分片的賦值

  del   del語句后面加的是list[index],不是值也不是索引

  ls.append()  返回值是None

  ls.count(...)  計某一值出現的次數

  ls.extend(another_ls)  將兩個列表合并

  ls.index(value)  獲取某個值的索引

  ls.insert(index,value)  在某個地方插入值

  ls.pop()  不加參數默認pop掉最后一個元素并且返回其值

  ls.remove(..)  去除從左到右第一個匹配到的值,如果沒找到報錯

  ls.reverse()  返回None,對ls本身反序

  ls.sort()  返回None,對ls本身排序

  //以上兩個和sorted(ls),reversed(ls)區別,這兩個是以ls為素材返回一個排序或者反序的迭代器。

  //順便,sorted和sort可以再傳一個key作為參數,key是一個函數對象,意思是在進行排序時依據不是默認的東西,而是把各個遍歷的項(對字典來說就是鍵)作為參數傳給key函數后經過處理后的返回值。比如想讓一個字典的列表按照每個字典中的某個鍵"dict_key"的值大小來排序就可以sorted(dict,key=lambda x:x.get("dict_key"))

  

■  dict

  dict類型保存鍵值對,其鍵只能是str,tuple等不可變類型或者自定義的類型。假如是tuple之類組合對象的話tuple中的每一個元素都還必須是不可變類型。字典類型可以容納任意多的鍵值對,并且支持高效檢索(從字典中存取數據所花平均時間是O(1)的,但最壞情況下有可能達到O(n)。)

  對于字典d有以下方法

  d.clear()  清空字典

  d.copy()  深復制

  d.get(...)  

  d.has_key(...)  判斷字典是否含有某個鍵

  d.items()  字典列表化,每個元素是個元組,tuple[0]是key,tuple[1]是value

  d.keys()

  d.update(e)  用e更新d,對于d中沒有的key則新建item,對于有的覆蓋老的value

  d.values()

?

  ■  str

  對于字符串s

  s.find(...)  返回子串的位置

  'mark'.join(list)  將mark作為分隔符把一個list給合并成一個字符串

  s.lower()  全部小寫化

  s.upper()  全部大寫

  s.title()  單詞詞首全部大寫

  s.capitalize()  字串串首大寫

  s.isupper()  判斷是否是全部字符都是大寫

  s.islower()

  s.istitle()

  //以上這六七個對字符串的文字性的處理都是返回值,不改變字符串本身的

  s.replace(a,b)

  s.split()

  s.strip()

  

  s.format("a","b")  這是個比較重要且有用的方法。用"a","b"等給出的素材串替換s中的帶大括號的部分,相當于%s % (...)的作用。s中可以寫"{},{}",這樣format函數的參數會依次填補這些大括號,如果想要手動指定順序也可以"{1},{0}"。如果s中寫的不是{0},{1}這種的話可以寫{some_text},然后在format的參數里就要寫some_text=...來指定替換的變量的名稱(有點模板語言的意思).相比于%的格式化字符串的替換,這個可以不用寫完全一對一的個數。format的變量寫法的話所有同樣的變量都只要寫一次就好了。*今天用這個format遇到一個坑:當你要替換的字符串里有正則指定模式重復多少遍的表達式(比如{12})這樣的話format會報錯,因為它把正則的{12}當成它要解析的第十二個變量了。解決方法是寫兩遍大括號來轉義,即原文中的{12}如果要進行format就要寫成{{12}}。

  在要經過format處理的字符串中還可以有更加靈活的寫法。上面說到底是用format參數指定的值來替換一些字符串中的變量,但實際上,format的參數甚至可以是一個對象,然后在格式化字符串里面寫上同名變量進行邏輯運算后再替換,比如可以通過下標或者訪問屬性的方法來取值:

#可以直接傳一個列表對象
"{li[0]} and {li[1]} are two items".format(li=[1,2])#在類中可以有類似以下的書寫方法,相當于傳一個自定義對象來取值格式化
"my name is {self.name} and my age is {self.age}".format(self=self)

?  關于格式化輸出這方面,用%號格式化輸出的規則和C語言類似,但是用format方法的話不太一樣,其表現形式是在大括號中加上冒號,以及各種不同的符號來表達格式化。比如<,^,>分別表示左對齊居中和右對齊,前面加上一個字符以表示填充符,后面加上一個數字表示寬度。"{var:0>8}".format(var="123") 得到"00000123"。"{:.2f}"則表示輸出的數字要是float類型且保留兩位小數,除了f表示float之外還可以有{:b}表示二進制,{:x}表示十六進制等,它們會自動對你傳遞進去的數字做進制轉換再轉化成字符串輸出。類型提示必須放在位置提示后面比如"{var:0^20.2f}"這樣。另外冒號后面加上一個逗號可以讓輸出有千位分隔。比如"{:,}".format(123456789)得到"123,456,789"

  另外,使用format的時候應該注意,調用它的對象和方法中的參數應盡量做到類型一直,比如"".format("")或者u"".format(u"")。如果出現str.format(unicode)時python默認操作是用系統的默認編碼格式(sys.getdefaultcoding那個)對unicode進行encode然后將其整合到相應str中去。類似的,如果是unicode.format(str)的話,那么就是拿系統默認編碼對str進行decode之后再整合進unicode。

■  string模塊

  其實str類本身的一些方法還不夠強大,所以有了專門的String模塊來處理一些事情

  string模塊的成員變量們:

    string.lowercase  指代所有小寫字母,相當于"abcd....xyz"

    string.uppercase

    string.letters  所有字母,先大寫再小寫,相當于"abcd...xyzABC..XYZ"

    string.whitespace  所有空白字符

    string.punctuation  一些標點符號

  string模塊的方法:

    capitlize(s)  返回S的首字母大寫的串

    capwords(s,sep)  用sep來split掉s,然后把split出來的每部分的首字母大寫,再用sep把這些部分連接起來,sep默認為空格

    center(s,width[,fllchar])  把s放在width(一個int數)長的字符串鄭重,兩邊用fillchar填充。可以用于生成文本文件中的分隔符之類的  

    count(s,sub[,start[,end]])  返回在s[start:end]片段中sub子串出現的次數

    swapcase(s)  切換大小寫字母

    zfill(s,width)  在s左側添加0知道寬度達到width

?

  上面曾經提到過s.format類似模板語言(比如velocity,python的jinja2模塊等)的功能,其實這是基于string中的一些類。string中有個Template類可以讓用戶手動地構造簡單的模板:

from string import Templates = Template("Hello, ${name}")    #變量用${...}的形式
s.substitute(name="Frank")    #返回Hello, Frank
s.safe_substitute(namae="Frank")    #save_substitute()對找不到的變量不報錯

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396384.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396384.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396384.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

終端terminal的顏色配置

PS1 color 終端terminal的顏色配置 PS1"\[\e[92;1m\][\u\e[90;5m\e[25m\[\e[91;4m\]Atlas\e[24m\[\e[1m\]\[\e[92;1m\] \W ]\\$\[\e[0m\]" Set CodeDescriptionExamplePreview1Bold/Bright echo -e "Normal \e[1mBold" 2Dim echo -e "Normal \e[2mDi…

速度與激情的Webpack

Also published in my tech blog也發布在我的技術博客中 This is a guide that is meant to help you ease your development workflow and save your time by using a bunch of awesome tools that you’ve read about on the internet (does React Hot Loader ring any bells…

java nio socket長連接_nio實現Socket長連接和心跳

前段時間用bio方式&#xff0c;也就是傳統io實現了socket的長連接和心跳&#xff0c;總覺著服務端開啟多線程管理socket連接的方式過于消耗資源&#xff0c;數據并發的情況下可能會影響到性能&#xff0c;因此就嘗試使用nio改進原來的代碼。然而改進的過程卻不像我起初設想的那…

unity讓對象作為參數_C#+Unity學習筆記:類與對象

參考文獻蜜酒廳通訊社 游戲部 石中居士對象(object)&#xff1a;有狀態、行為和身份的東西。狀態(state)&#xff1a;表示物體特征的信息&#xff0c;可以用來跟蹤對象的狀態。屬性(properties)&#xff1a;因為編程人員需要把控對象的狀態&#xff0c;所以要對其進行訪問。通過…

Tomcat 報 The valid characters are defined in RFC 7230 and RFC 3986

問題 24-Mar-2017 23:43:21.300 INFO [http-apr-8001-exec-77] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalAr…

Linux Kernel Oops異常分析

0&#xff0e;linux內核異常常用分析方法 異常地址是否在0附近&#xff0c;確認是否是空指針解引用問題異常地址是否在iomem映射區&#xff0c;確認是否是設備訪問總線異常問題&#xff0c;如PCI異常導致的地址訪問異常異常地址是否在stack附近&#xff0c;如果相鄰&#xff0c…

Centos7.5 VMtools的安裝與卸載

一、安裝1、自帶tools&#xff1a; 選擇VMware工具欄 > 虛擬機 > 安裝VMtools2、掛載光驅3、tar -zxvf VMwareTools-10.3.2-9925305.tar.gz&#xff08;這里以tar文件為例&#xff09;4、切換到目標目錄&#xff0c;執行&#xff08;一定要使用root權限執行&#xff09;…

gitter 卸載_最佳Gitter渠道:開發人員工具

gitter 卸載by Gitter通過吉特 最佳Gitter渠道&#xff1a;開發人員工具 (Best Gitter channels: Developer Tools) Developer tools have become essential to any kind of serious software development, also in the open source setting. They can ease the daily develop…

java 過濾腳本_我寫的得到天氣的Java代碼,其中有過濾腳本和過濾HTMLtag的函數。...

public class WeatherFilter{private String html;private String target"http://weather.news.sohu.com/query.php?city北京";public WeatherFilter()throws Exception{this(null);}public WeatherFilter(String targetIn)throws Exception{if(targetIn!null)this.…

【懶癌發作】收集各種懶癌發作時用程序寫作業的程序

updata:20170621 好的&#xff0c;已經是準高一了&#xff0c;現在看起來太蠢了。。。 -------------------------------------------------------------------------------------- 要真正的運用&#xff0c;程序一定是要來解決實際問題的——比如作業&#xff08;懶就直說&…

50歐姆線設計 高頻pcb_硬件設計基礎100問(三)

硬件基礎知識問答今天依舊是節前知識儲備哦&#xff0c;jacky大神整理的硬件基礎知識很細致&#xff0c;第三彈學起來&#xff01;01 1、晶體管基本放大電路有共射、共集、共基三種接法&#xff0c;請簡述這三種基本放大電路的特點。共射&#xff1a;共射放大電路具有放大電流和…

如何正確實現 Java 中的 HashCode

相等 和 Hash Code 從一般角度來看&#xff0c;Equality 是不錯的&#xff0c;但是 hash code 更則具技巧性。如果我們在 hash code上多下點功夫&#xff0c;我們就能了解到 hash code 就是用在細微處去提升性能的。 大部分的數據結構使用equals去檢查是否他們包含一個元素。例…

一億小目標成就_成就卓越的一種方式:自我選擇

一億小目標成就by Prosper Otemuyiwa通過Prosper Otemuyiwa 成就卓越的一種方式&#xff1a;自我選擇 (One way to Greatness: Pick Yourself) I’ve heard many people say this: “I want to be great”, but most people only just have wild thoughts & imaginations …

java操作文件愛女_Java的IO操作---File類

目標1)掌握File類作用2)可以使用file類中方法對文件進行讀寫操作。File類唯一與文件有關的類。使用file類可進行創建或刪除操作&#xff0c;要想使用File類&#xff0c;首先觀察File類的構造方法。public File(String pathname);實例化File類的時候&#xff0c;必須設置好路徑。…

openssl創建私有ca

openssl創建私有ca1.ssl大概內容PKI&#xff1a;公鑰基礎設施結構CA&#xff1a;證書權威機構&#xff0c;PKI的核心CRL&#xff1a;證書吊銷列表,使用證書之前需要檢測證書有效性證書存儲格式常見的X509格式包含內容 公鑰有效期限證書的合法擁有人證書該如何使用CA的信息CA簽名…

查詢顯示注釋_SQL的簡單查詢

1.基本的查詢語句-- *代表查詢所有的列select * from <表名>;distinct表示列中不包括重復的值&#xff0c;例如select distinct 姓名&#xff1b;如果是select distinct 姓名,學號&#xff1b;則表示姓名和學號都重復的值才會顯示。as為列設定別名&#xff0c;例如select…

【AC自動機】【數據結構】【樹】【Aho-Corasick automation】AC自動機理解(入門)...

引入 我們首先提出一個問題&#xff1a; 給出n個串每個串的長度≤m 然后給出一個長度為k的串&#xff0c;詢問前n個串中有多少個是匹配成了的 暴力搜索 這題不是sb題目嗎&#xff1f; 隨隨便便O(kmn)跑過。 。。。。 n10000 m50 k1000000 。。。。 好吧——我們用AC自動…

域控dns無法解析域控_域注冊商,DNS和托管

域控dns無法解析域控by ????? ??????????由??????????????? 域名注冊商&#xff0c;DNS和托管 (Domain registrars, DNS, and hosting) 如何正確設置網站 (How to set up your website the right way) It took me a while to set up the infras…

java 棧空間_初學JAVA——棧空間堆空間的理解

1.Person pangzi; //這是在“開拓空間”于棧空間pangzinew Person(); //這是賦值于堆空間上兩步就是在做與空間對應的事。2.值類型直接存入棧空間&#xff0c;如AF&#xff0c;引用類型存入堆空間&#xff0c;在棧空間存有“索引地址”&#xff0c;如當需要B時&#xff0…

二進制安裝kubernetes v1.11.2 (第八章 kube-apiserver 部署)

繼續上一章部署。 八、部署kube-apiserver組件 使用第七章的haproxy和keepalived部署的高可用集群提供的VIP&#xff1a;${MASTER_VIP} 8.1 下載二進制文件&#xff0c;參考 第三章  8.2 創建 kubernetes 證書和私鑰 source /opt/k8s/bin/environment.sh cat > kubernetes-…