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

1、变量

1.python不用事先声明变量,赋值过程中就包含了变量声明和定义的过程 

2.用“=”赋值,左边是变量名,右边是变量的值

1.1、 数字

整数

int_var = 1

长整数

long_var = 1000L

浮点数

float_var = 1.0

复数

这个不讲了,用的不多。需要的时候自行查资料吧

1.2、 字符串

python在长字符串中寻找重复子串_Python 入门到精通_第1张图片

运行以上代码的结果:

python在长字符串中寻找重复子串_Python 入门到精通_第2张图片

1.3、列表

       类似于C++或Java语言的数组,一个有序可变集合的容器。支持内置的基础数据结构甚至是列表,列表是可以嵌套的。不同的数据结构也可以放在同一个列表中,没有统一类型的限制。

python在长字符串中寻找重复子串_Python 入门到精通_第3张图片

运行以上代码:

python在长字符串中寻找重复子串_Python 入门到精通_第4张图片

1.4、元祖

       可以视为不可变的列表,在赋值之后就不能二次更改了。

python在长字符串中寻找重复子串_Python 入门到精通_第5张图片

1.5、字典

       类似于C++语言的map,key-value键值对的集合,无序的容器。

python在长字符串中寻找重复子串_Python 入门到精通_第6张图片

运行以上代码:

python在长字符串中寻找重复子串_Python 入门到精通_第7张图片

2、运算符

2.1、算术运算符

python在长字符串中寻找重复子串_Python 入门到精通_第8张图片

2.2、比较运算符

python在长字符串中寻找重复子串_Python 入门到精通_第9张图片

2.3、赋值运算符

python在长字符串中寻找重复子串_Python 入门到精通_第10张图片

2.4、逻辑运算符

python在长字符串中寻找重复子串_Python 入门到精通_第11张图片

2.5、成员运算符

python在长字符串中寻找重复子串_Python 入门到精通_第12张图片

2.6、身份运算符

python在长字符串中寻找重复子串_Python 入门到精通_第13张图片

2.7、位运算符

python在长字符串中寻找重复子串_Python 入门到精通_第14张图片

3、语句

3.1、if

python在长字符串中寻找重复子串_Python 入门到精通_第15张图片

例如:

python在长字符串中寻找重复子串_Python 入门到精通_第16张图片

3.2、for

用来遍历容器、或者执行重复性的代码。

遍历容器:

python在长字符串中寻找重复子串_Python 入门到精通_第17张图片

运行结果:

python在长字符串中寻找重复子串_Python 入门到精通_第18张图片

执行重复性代码:

fd4ad23c9eb99d595cc7f710bfb0b3ae.png

运行结果:

python在长字符串中寻找重复子串_Python 入门到精通_第19张图片

while

用来执行重复的代码

break

终止当前的循环

continue

继续当前的循环(跳过本次循环)

4、集合

4.1、list

  • python内置的一种数据结构

  • 有序

  • 可更改(添加、删除)

声明:

python在长字符串中寻找重复子串_Python 入门到精通_第20张图片

获取列表长度:

6e018c959492f75800766fa9c4ed7d85.png

获取列表元素:

python在长字符串中寻找重复子串_Python 入门到精通_第21张图片

如果下标越界会报错。

更改列表元素:

python在长字符串中寻找重复子串_Python 入门到精通_第22张图片

增加元素:

###末尾追加 >>> 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内置的一种数据结构

  • 有序

  • 不可更改

  • 在赋值的时候决定所有元素

声明:

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

获取长度:

3ece0ada82f5a6e2b71b930dcafd14c8.png

获取元素:

python在长字符串中寻找重复子串_Python 入门到精通_第23张图片

如果下标越界会报错。

4.3、dict

  • python内置的一种数据结构

  • 无序

  • 可更改

类似于C++语言的map,存键值对,有很快的查找速度。比如根据身份证号查找某个人的名字,根据学号查找学生成绩单。用list遍历也可以得到结果,但是太慢了,list就好像你在一个小区找人,你一家一家敲门。dict就好像你直接按照地址X栋X单元X层直接找。dict是典型的用空间换时间的例子。会占用大量内存,但是查找、插入速度很快,不会随着元素数量增加而增加。list则是时间换空间的例子,不会占用大量内存,但是随着元素数量增多,查找时间会变很长

声明:

fd6e650cdb19596ee874bb19647be0d4.png

查找:

python在长字符串中寻找重复子串_Python 入门到精通_第24张图片

为了避免出现报错的情况我们一般事先判断一下这个key是否在字典中

dd99df2c7b7708fc1c92b74066aba3a1.png

也可以用get方法取,如果key不存在,会返回None或者自己定义的默认值

python在长字符串中寻找重复子串_Python 入门到精通_第25张图片

更改:

python在长字符串中寻找重复子串_Python 入门到精通_第26张图片

删除:

python在长字符串中寻找重复子串_Python 入门到精通_第27张图片

元素个数:

014f5778db70faf3ccb1a89407db3033.png

获取所有key:

b8747fd559e687b04a39b9e29bebf3ee.png

获取所有values:

e0afe4275ff4ebd5031c305eae303693.png

获取所有键值对:

25b58529d3221dbefc0c7604469fa1e0.png

4.4、set

  • python内置数据结构

  • 无序

  • 可更改

set可以视为没有value的dict,只存key,一般用做去重或者集合求交、求并等。

声明:

2da920786a0a62a4d382354b7ff185fa.png

求交,并:

python在长字符串中寻找重复子串_Python 入门到精通_第28张图片

增加元素:

python在长字符串中寻找重复子串_Python 入门到精通_第29张图片

删除元素:

python在长字符串中寻找重复子串_Python 入门到精通_第30张图片

5、类

简介

面向对象是我们经常能听到的术语,即class,类。事实上,主角是两个,一个是类,一个是类实例。人类,是一个类,我们每一个人是一个人类的实例。而类之间又有一些关系,例如,我们既是人类,也是动物,更细化来讲,我们是哺乳类动物,灵长类,类似于集合的概念,哺乳动物属于动物,而在面向对象中我们通常称哺乳动物是动物的子类。而对于动物这个类来说,会自带一些属性,例如:年龄、体重。也会有一些方法:生殖、呼吸。而不同种类的动物(即动物类的各种子类)可能会有不同的属性或方法,像胎生、卵生,像鸟类的飞行的方法和豹子奔跑的方法。

定义

用关键字class去定义一个类,如果没有指定父类,默认继承object类

0e82f6be9820632433282cf68ca08b85.png

这样,我们定义个了一个Human,人类。

类属性2b6dba411e10f15fde05e355d57819c9.png

为什么要叫类属性呢,因为这个属性是和类绑定的,并不是和实例绑定的。胎生这个属性是全人类共有的,并不是某个人特殊拥有的属性。

实例属性

python在长字符串中寻找重复子串_Python 入门到精通_第31张图片

我们首先实例化了一个人类human_a,然后给这个人类设置了一个实例属性name,name这个属性独立于其他的人类,是和实例绑定的,所以叫实例属性。

  • 实例属性可以在实例创建后任意时间设置。

  • 一般放在构造函数里__init()__

类方法

class Human(object):

bf263ed2939837acab06f943c5574e4c.png

  • human_a = Human("alan") human_a.walk() 运行结果:

    alan is walking

类的方法可以看做是一种类属性,而传入的第一个参数self,表示调用这个类方法的实例。像上面的例子,human_a调用了walk这个类方法,human_a的名字是alan,所以运行的结果就是alan is walking。

访问控制

从上面的例子来看,我们可以在外部随意更改name这个属性,如果不想让外部直接访问到,则在属性名字前加两个下划线__name,这样从外部就无法直接访问了。如果还是想访问,可以再加个get的接口。

python在长字符串中寻找重复子串_Python 入门到精通_第32张图片

如果还是想更改__name字段,可以再加上一个set接口

python在长字符串中寻找重复子串_Python 入门到精通_第33张图片

可能有人会有疑问,为何要这么“画蛇添足”呢?其不然,这样会增强代码的健壮性,直接暴露属性可能会带来意想不到的后果,通过接口的方式可以加以控制,例如,我们可以通过set接口去限定name的长度。

继承

最开始的简介里说到,哺乳动物是动物的一种,用面向对象的属于来说,哺乳动物是动物的子类,子类拥有父类的属性、方法,即继承。同时又可以拥有父类没有的属性和方法,即多态。还是以人类为例,通常来说,人类又可以分为男人和女人(当然也有别的,23333)

python在长字符串中寻找重复子串_Python 入门到精通_第34张图片

来,我们看下这个男人,多了一个新的属性,__has_wife(是否已婚)。我们写到了Man的构造函数里。其实通常并不这么写构造函数,假如Human里有很多属性、很多初始化步骤,我们Man继承的时候难不成要复制粘贴一遍Human的构造函数?当然不是啦,通常会这么写。

python在长字符串中寻找重复子串_Python 入门到精通_第35张图片

super(Man, self).__init__(name)等价于调用了父类Human的构造函数,就不用再复制粘贴一遍了。既然有男人,那就再来个女人吧。

python在长字符串中寻找重复子串_Python 入门到精通_第36张图片

我们都道,男人和女人是不一样的,通常男人都自带抽烟、喝酒、烫头,啊。。。并没有烫头。

python在长字符串中寻找重复子串_Python 入门到精通_第37张图片

当然,女人也自带逛街、化妆等天赋技能。

139292db58d364d7c091456a9911fe23.png

好了,有没有感觉到这种继承的优越性。可以很清晰地看到,男人和女人都有一些相同的属性,也有一些各自不同的方法。如果哪天人类有了别的方法、属性,直接在Human类更改,男人和女人也会自动继承。如果想再设计一个双性人这个类,那直接从Human继承就可以了,对男人和女人不会有任何影响。这就是面向对象的优越性。

6、模块

通常来说,比较正规的工程不会把所有代码放在一个py文件里,我们会把代码拆成各个模块,分别调用。对python来说,拆成各个模块可以看做拆成各个py文件。

搜索路径

通常来说,同文件夹下的py文件可以直接import。

87566d47df07c5b5e9b6fd4bee14de23.png

我们把这个保存至hello.py

d47431d5355ed50354a4861c890e4444.png

在run.py里import,然后调用print_hello() 目录结构

python在长字符串中寻找重复子串_Python 入门到精通_第38张图片

hello.py和run.py在同一目录下,可以直接import 如果在不同路径下,可以在sys.path里手动加入你想import的路径

python在长字符串中寻找重复子串_Python 入门到精通_第39张图片

如果run.py不在/home/zhuzekun/course文件夹下,手动加入这个路径,就可以import这个路径下的hello.py

7、包

通常一个工程不可能只有一层目录结构,并且也不会一个一个path去append到sys里,常用的做法是包,一个目录及其子目录组成的一个包(可以看做一个库)。举个例子。

python在长字符串中寻找重复子串_Python 入门到精通_第40张图片

这是一个course文件夹,里面有m1和m2这两个文件夹,同时m1中又有一个子文件夹m1_1。文件b.py。

0830c24366d1d6623d370c9d98d25529.png

文件a.py

dce255d4fa33336356c2543a555f817a.png

文件run.py

python在长字符串中寻找重复子串_Python 入门到精通_第41张图片

在run.py中要调用m1/b.py和m1/m1_1/a.py,只需要导入course这个包就可以了。

8、字符串处理

在日常工作中,我们经常会和字符串打交道,比如对字符串进行子串切取,反转字符串,删掉字符串中的某些子串,这一篇会讲解常用的几种字符串处理方法。

查找

python在长字符串中寻找重复子串_Python 入门到精通_第42张图片

查找时,返回的是第一个匹配的子串的下标位置,如果没有找到,返回-1

分割

字符串按照某个子串进行分割,返回分割后的列表

python在长字符串中寻找重复子串_Python 入门到精通_第43张图片

大小写转换

python在长字符串中寻找重复子串_Python 入门到精通_第44张图片

截取

个人认为这是python最优雅的方法之一

python在长字符串中寻找重复子串_Python 入门到精通_第45张图片

追加

9a103253e3b49b6b34c0169efe391b46.png

替换

af61861dfc6b3f114bc27bf2c3a2a7d9.png

连接

python在长字符串中寻找重复子串_Python 入门到精通_第46张图片

反转

python在长字符串中寻找重复子串_Python 入门到精通_第47张图片

9、文件读写

我们在工作时应该经常会遇到修改文件内容的活。例如:每天有一个文件,现在要把整个月的数据拼接在一起,并且做个去重,莫非你要一个一个打开,然后复制粘贴?what the fuck!python可以帮你完成这项重复性的工作!

读文件

我们看文件都是打开某个文件,python也不例外,内置了一个open函数。我们写一个py文件:read_file.py

aa8a887bedd39114970ddd9458729024.png

运行 python read_file.py,讲道理,会报错,2333。因为根本木有test.txt这个文件啊

af5fe1eb79f9585c974fb2b77adda28f.png

我们先写一个test.txt文件吧:echo这个命令可以看做是输出某个字符串。

12fb2c1b36909285b91d79a25ec5254d.png

再运行 python read_file.py,就木有报错了。然而并没有什么卵用,因为我们只是打开了文件,并没有读取文件

f33df66315c1c10b46f3c7f2e291e0ce.png

再运行 python read_file.py

调用了read接口,就读取了文件内容。不过我们通常不这么做。万一。。。你一个文件比内存还大。。。这不崩了么。。。正确的姿势如下:

python在长字符串中寻找重复子串_Python 入门到精通_第48张图片

readlines中的这个参数,并不是行数,而是文件大小(字节数),所返回的必然都是完整的行数据,大多数情况下,返回的数据的字节数会稍微比指定的值大一点(除最后一次调用 readlines(10000) 函数的时候)。通常情况下,Python 会自动将用户指定的值调整成内部缓存大小的整数倍。这样并不是一下把整个文件读完,而是一部分一部分读取,不会崩掉。

写文件

4bb2d90f27628187b500960359f6495b.png

这样test.txt就被写入了如下内容:

6d971db11ae3f9559919e7242b559bd5.png

或者直接调用write:

8a7576eb3a979e93273accb67fad1f77.png

追加写文件

2fee08b501f3ba711a75439eabf11ca8.png

这样,test.txt内容变成了:

d23402ba144bd33cfc061c302274f5fa.png

10、数据结构

11、【爬虫】--正则表达式

12、【爬虫】--beautifulsoup

你可能感兴趣的:(python在长字符串中寻找重复子串_Python 入门到精通)