日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python在长字符串中寻找重复子串_Python 入门到精通

發(fā)布時(shí)間:2024/10/14 python 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python在长字符串中寻找重复子串_Python 入门到精通 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、變量

1.python不用事先聲明變量,賦值過(guò)程中就包含了變量聲明和定義的過(guò)程?

2.用“=”賦值,左邊是變量名,右邊是變量的值

1.1、 數(shù)字

整數(shù)

int_var = 1

長(zhǎng)整數(shù)

long_var = 1000L

浮點(diǎn)數(shù)

float_var = 1.0

復(fù)數(shù)

這個(gè)不講了,用的不多。需要的時(shí)候自行查資料吧

1.2、 字符串

運(yùn)行以上代碼的結(jié)果:

1.3、列表

? ? ? ?類(lèi)似于C++或Java語(yǔ)言的數(shù)組,一個(gè)有序可變集合的容器。支持內(nèi)置的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)甚至是列表,列表是可以嵌套的。不同的數(shù)據(jù)結(jié)構(gòu)也可以放在同一個(gè)列表中,沒(méi)有統(tǒng)一類(lèi)型的限制。

運(yùn)行以上代碼:

1.4、元祖

???????可以視為不可變的列表,在賦值之后就不能二次更改了。

1.5、字典

????? ?類(lèi)似于C++語(yǔ)言的map,key-value鍵值對(duì)的集合,無(wú)序的容器。

運(yùn)行以上代碼:

2、運(yùn)算符

2.1、算術(shù)運(yùn)算符

2.2、比較運(yùn)算符

2.3、賦值運(yùn)算符

2.4、邏輯運(yùn)算符

2.5、成員運(yùn)算符

2.6、身份運(yùn)算符

2.7、位運(yùn)算符

3、語(yǔ)句

3.1、if

例如:

3.2、for

用來(lái)遍歷容器、或者執(zhí)行重復(fù)性的代碼。

遍歷容器:

運(yùn)行結(jié)果:

執(zhí)行重復(fù)性代碼:

運(yùn)行結(jié)果:

while

用來(lái)執(zhí)行重復(fù)的代碼

break

終止當(dāng)前的循環(huán)

continue

繼續(xù)當(dāng)前的循環(huán)(跳過(guò)本次循環(huán))

4、集合

4.1、list

  • python內(nèi)置的一種數(shù)據(jù)結(jié)構(gòu)

  • 有序

  • 可更改(添加、刪除)

聲明:

獲取列表長(zhǎng)度:

獲取列表元素:

如果下標(biāo)越界會(huì)報(bào)錯(cuò)。

更改列表元素:

增加元素:

###末尾追加 >>> game.append("wow") >>> game[3] 'wow' >>> game ['dota', 'dota2', 'lol', 'wow']

###指定位置插入 >>> game.insert(2, "war3") >>> game ['dota', 'dota2', 'war3', 'lol', 'wow']

##刪除元素

###刪除末尾的元素 >>> game.pop() 'wow' >>> game ['dota', 'dota2', 'war3', 'lol']

###刪除指定位置元素 >>> game.pop(1) 'dota2' >>> game ['dota', 'war3', 'lol']

4.2、tuple

  • python內(nèi)置的一種數(shù)據(jù)結(jié)構(gòu)

  • 有序

  • 不可更改

  • 在賦值的時(shí)候決定所有元素

聲明:

##聲明 >>> game = ('dota', 'war3', 'lol')?

獲取長(zhǎng)度:

獲取元素:

如果下標(biāo)越界會(huì)報(bào)錯(cuò)。

4.3、dict

  • python內(nèi)置的一種數(shù)據(jù)結(jié)構(gòu)

  • 無(wú)序

  • 可更改

類(lèi)似于C++語(yǔ)言的map,存鍵值對(duì),有很快的查找速度。比如根據(jù)身份證號(hào)查找某個(gè)人的名字,根據(jù)學(xué)號(hào)查找學(xué)生成績(jī)單。用list遍歷也可以得到結(jié)果,但是太慢了,list就好像你在一個(gè)小區(qū)找人,你一家一家敲門(mén)。dict就好像你直接按照地址X棟X單元X層直接找。dict是典型的用空間換時(shí)間的例子。會(huì)占用大量?jī)?nèi)存,但是查找、插入速度很快,不會(huì)隨著元素?cái)?shù)量增加而增加。list則是時(shí)間換空間的例子,不會(huì)占用大量?jī)?nèi)存,但是隨著元素?cái)?shù)量增多,查找時(shí)間會(huì)變很長(zhǎng)

聲明:

查找:

為了避免出現(xiàn)報(bào)錯(cuò)的情況我們一般事先判斷一下這個(gè)key是否在字典中

也可以用get方法取,如果key不存在,會(huì)返回None或者自己定義的默認(rèn)值

更改:

刪除:

元素個(gè)數(shù):

獲取所有key:

獲取所有values:

獲取所有鍵值對(duì):

4.4、set

  • python內(nèi)置數(shù)據(jù)結(jié)構(gòu)

  • 無(wú)序

  • 可更改

set可以視為沒(méi)有value的dict,只存key,一般用做去重或者集合求交、求并等。

聲明:

求交,并:

增加元素:

刪除元素:

5、類(lèi)

簡(jiǎn)介

面向?qū)ο笫俏覀兘?jīng)常能聽(tīng)到的術(shù)語(yǔ),即class,類(lèi)。事實(shí)上,主角是兩個(gè),一個(gè)是類(lèi),一個(gè)是類(lèi)實(shí)例。人類(lèi),是一個(gè)類(lèi),我們每一個(gè)人是一個(gè)人類(lèi)的實(shí)例。而類(lèi)之間又有一些關(guān)系,例如,我們既是人類(lèi),也是動(dòng)物,更細(xì)化來(lái)講,我們是哺乳類(lèi)動(dòng)物,靈長(zhǎng)類(lèi),類(lèi)似于集合的概念,哺乳動(dòng)物屬于動(dòng)物,而在面向?qū)ο笾形覀兺ǔ7Q(chēng)哺乳動(dòng)物是動(dòng)物的子類(lèi)。而對(duì)于動(dòng)物這個(gè)類(lèi)來(lái)說(shuō),會(huì)自帶一些屬性,例如:年齡、體重。也會(huì)有一些方法:生殖、呼吸。而不同種類(lèi)的動(dòng)物(即動(dòng)物類(lèi)的各種子類(lèi))可能會(huì)有不同的屬性或方法,像胎生、卵生,像鳥(niǎo)類(lèi)的飛行的方法和豹子奔跑的方法。

定義

用關(guān)鍵字class去定義一個(gè)類(lèi),如果沒(méi)有指定父類(lèi),默認(rèn)繼承object類(lèi)

這樣,我們定義個(gè)了一個(gè)Human,人類(lèi)。

類(lèi)屬性

為什么要叫類(lèi)屬性呢,因?yàn)檫@個(gè)屬性是和類(lèi)綁定的,并不是和實(shí)例綁定的。胎生這個(gè)屬性是全人類(lèi)共有的,并不是某個(gè)人特殊擁有的屬性。

實(shí)例屬性

我們首先實(shí)例化了一個(gè)人類(lèi)human_a,然后給這個(gè)人類(lèi)設(shè)置了一個(gè)實(shí)例屬性name,name這個(gè)屬性獨(dú)立于其他的人類(lèi),是和實(shí)例綁定的,所以叫實(shí)例屬性。

  • 實(shí)例屬性可以在實(shí)例創(chuàng)建后任意時(shí)間設(shè)置。

  • 一般放在構(gòu)造函數(shù)里__init()__

類(lèi)方法

class Human(object):

  • human_a = Human("alan") human_a.walk() 運(yùn)行結(jié)果:

    alan is walking

類(lèi)的方法可以看做是一種類(lèi)屬性,而傳入的第一個(gè)參數(shù)self,表示調(diào)用這個(gè)類(lèi)方法的實(shí)例。像上面的例子,human_a調(diào)用了walk這個(gè)類(lèi)方法,human_a的名字是alan,所以運(yùn)行的結(jié)果就是alan is walking。

訪問(wèn)控制

從上面的例子來(lái)看,我們可以在外部隨意更改name這個(gè)屬性,如果不想讓外部直接訪問(wèn)到,則在屬性名字前加兩個(gè)下劃線__name,這樣從外部就無(wú)法直接訪問(wèn)了。如果還是想訪問(wèn),可以再加個(gè)get的接口。

如果還是想更改__name字段,可以再加上一個(gè)set接口

可能有人會(huì)有疑問(wèn),為何要這么“畫(huà)蛇添足”呢?其不然,這樣會(huì)增強(qiáng)代碼的健壯性,直接暴露屬性可能會(huì)帶來(lái)意想不到的后果,通過(guò)接口的方式可以加以控制,例如,我們可以通過(guò)set接口去限定name的長(zhǎng)度。

繼承

最開(kāi)始的簡(jiǎn)介里說(shuō)到,哺乳動(dòng)物是動(dòng)物的一種,用面向?qū)ο蟮膶儆趤?lái)說(shuō),哺乳動(dòng)物是動(dòng)物的子類(lèi),子類(lèi)擁有父類(lèi)的屬性、方法,即繼承。同時(shí)又可以擁有父類(lèi)沒(méi)有的屬性和方法,即多態(tài)。還是以人類(lèi)為例,通常來(lái)說(shuō),人類(lèi)又可以分為男人和女人(當(dāng)然也有別的,23333)

來(lái),我們看下這個(gè)男人,多了一個(gè)新的屬性,__has_wife(是否已婚)。我們寫(xiě)到了Man的構(gòu)造函數(shù)里。其實(shí)通常并不這么寫(xiě)構(gòu)造函數(shù),假如Human里有很多屬性、很多初始化步驟,我們Man繼承的時(shí)候難不成要復(fù)制粘貼一遍Human的構(gòu)造函數(shù)?當(dāng)然不是啦,通常會(huì)這么寫(xiě)。

super(Man, self).__init__(name)等價(jià)于調(diào)用了父類(lèi)Human的構(gòu)造函數(shù),就不用再?gòu)?fù)制粘貼一遍了。既然有男人,那就再來(lái)個(gè)女人吧。

我們都道,男人和女人是不一樣的,通常男人都自帶抽煙、喝酒、燙頭,啊。。。并沒(méi)有燙頭。

當(dāng)然,女人也自帶逛街、化妝等天賦技能。

好了,有沒(méi)有感覺(jué)到這種繼承的優(yōu)越性。可以很清晰地看到,男人和女人都有一些相同的屬性,也有一些各自不同的方法。如果哪天人類(lèi)有了別的方法、屬性,直接在Human類(lèi)更改,男人和女人也會(huì)自動(dòng)繼承。如果想再設(shè)計(jì)一個(gè)雙性人這個(gè)類(lèi),那直接從Human繼承就可以了,對(duì)男人和女人不會(huì)有任何影響。這就是面向?qū)ο蟮膬?yōu)越性。

6、模塊

通常來(lái)說(shuō),比較正規(guī)的工程不會(huì)把所有代碼放在一個(gè)py文件里,我們會(huì)把代碼拆成各個(gè)模塊,分別調(diào)用。對(duì)python來(lái)說(shuō),拆成各個(gè)模塊可以看做拆成各個(gè)py文件。

搜索路徑

通常來(lái)說(shuō),同文件夾下的py文件可以直接import。

我們把這個(gè)保存至hello.py

在run.py里import,然后調(diào)用print_hello() 目錄結(jié)構(gòu)

hello.py和run.py在同一目錄下,可以直接import 如果在不同路徑下,可以在sys.path里手動(dòng)加入你想import的路徑

如果run.py不在/home/zhuzekun/course文件夾下,手動(dòng)加入這個(gè)路徑,就可以import這個(gè)路徑下的hello.py

7、包

通常一個(gè)工程不可能只有一層目錄結(jié)構(gòu),并且也不會(huì)一個(gè)一個(gè)path去append到sys里,常用的做法是包,一個(gè)目錄及其子目錄組成的一個(gè)包(可以看做一個(gè)庫(kù))。舉個(gè)例子。

這是一個(gè)course文件夾,里面有m1和m2這兩個(gè)文件夾,同時(shí)m1中又有一個(gè)子文件夾m1_1。文件b.py。

文件a.py

文件run.py

在run.py中要調(diào)用m1/b.py和m1/m1_1/a.py,只需要導(dǎo)入course這個(gè)包就可以了。

8、字符串處理

在日常工作中,我們經(jīng)常會(huì)和字符串打交道,比如對(duì)字符串進(jìn)行子串切取,反轉(zhuǎn)字符串,刪掉字符串中的某些子串,這一篇會(huì)講解常用的幾種字符串處理方法。

查找

查找時(shí),返回的是第一個(gè)匹配的子串的下標(biāo)位置,如果沒(méi)有找到,返回-1

分割

字符串按照某個(gè)子串進(jìn)行分割,返回分割后的列表

大小寫(xiě)轉(zhuǎn)換

截取

個(gè)人認(rèn)為這是python最優(yōu)雅的方法之一

追加

替換

連接

反轉(zhuǎn)

9、文件讀寫(xiě)

我們?cè)诠ぷ鲿r(shí)應(yīng)該經(jīng)常會(huì)遇到修改文件內(nèi)容的活。例如:每天有一個(gè)文件,現(xiàn)在要把整個(gè)月的數(shù)據(jù)拼接在一起,并且做個(gè)去重,莫非你要一個(gè)一個(gè)打開(kāi),然后復(fù)制粘貼?what the fuck!python可以幫你完成這項(xiàng)重復(fù)性的工作!

讀文件

我們看文件都是打開(kāi)某個(gè)文件,python也不例外,內(nèi)置了一個(gè)open函數(shù)。我們寫(xiě)一個(gè)py文件:read_file.py

運(yùn)行 python read_file.py,講道理,會(huì)報(bào)錯(cuò),2333。因?yàn)楦灸居衪est.txt這個(gè)文件啊

我們先寫(xiě)一個(gè)test.txt文件吧:echo這個(gè)命令可以看做是輸出某個(gè)字符串。

再運(yùn)行 python read_file.py,就木有報(bào)錯(cuò)了。然而并沒(méi)有什么卵用,因?yàn)槲覀冎皇谴蜷_(kāi)了文件,并沒(méi)有讀取文件

再運(yùn)行 python read_file.py

調(diào)用了read接口,就讀取了文件內(nèi)容。不過(guò)我們通常不這么做。萬(wàn)一。。。你一個(gè)文件比內(nèi)存還大。。。這不崩了么。。。正確的姿勢(shì)如下:

readlines中的這個(gè)參數(shù),并不是行數(shù),而是文件大小(字節(jié)數(shù)),所返回的必然都是完整的行數(shù)據(jù),大多數(shù)情況下,返回的數(shù)據(jù)的字節(jié)數(shù)會(huì)稍微比指定的值大一點(diǎn)(除最后一次調(diào)用 readlines(10000) 函數(shù)的時(shí)候)。通常情況下,Python 會(huì)自動(dòng)將用戶指定的值調(diào)整成內(nèi)部緩存大小的整數(shù)倍。這樣并不是一下把整個(gè)文件讀完,而是一部分一部分讀取,不會(huì)崩掉。

寫(xiě)文件

這樣test.txt就被寫(xiě)入了如下內(nèi)容:

或者直接調(diào)用write:

追加寫(xiě)文件

這樣,test.txt內(nèi)容變成了:

10、數(shù)據(jù)結(jié)構(gòu)

11、【爬蟲(chóng)】--正則表達(dá)式

12、【爬蟲(chóng)】--beautifulsoup

總結(jié)

以上是生活随笔為你收集整理的python在长字符串中寻找重复子串_Python 入门到精通的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。