python基础6-集合类型

今天我们要了解的是集合类型,也是我们要说的最后一个基本数据类型了,集合(set)数据类型很像字典的key,因为它不可以重复,而且无序, 但它不是映射对应关系,就像是没有value的字典,创建一个集合只能用函数set(),这些就是集合的基本特性,我们还是看几个例子来了解下set的使用:

集合的创建和值访问:

创建集合我们用set方法,我们传入一个字符串,就创建了一个集合类型, 可以看出生成的集合值是不重复的,helloworld有三个l,但集合自动删除重复,只保留一个元素,另外访问集合元素的方法我们可以用for循环来遍历一个集合的所有元素。

集合操作符:

集合的操作符跟我们上学时候的集合得概念一样,两个集合直接可以求交集,并集,对应到集合的操作符就是‘|’和‘&’,并集就是求出的新的集合每个元素都至少是其中一个集合中的成员,交集就是这个新集合同时属于这两个集合的成员,例如:

集合的基本操作就是这些,可能有的小伙伴不知道集合用在哪里合适,其实还是要根据自己的实际情况,千万不要觉得某些数据类型没用,只能说暂时没用到而已,发明python的大神也不傻子,他肯定不会创造一个每个人都不会用的数据类型出来,为让大家更容易理解并应用,下面我说两个集合的应用场景。

集合常用的就是列表去重, 假设你有个列表,这个列表里有很多重复元素,你想快速删除重复元素,得到一个没有重复元素的列表,用set是最快的,最后再将set转成列表,就生成了一个没有重复元素的列表,如下:

第二个应用场景是,假如你现在有两个比较大的列表A和B,现在的任务是找出包含在A列表但不在B列表中的元素,这个时候一般的做法可以用列表表达式来做:

(x for x in A if x not in B)

这个方法本身没什么问题,但前提就是如果列表的元素非常的多,这种方法就会非常慢,那我们可以换一种思路去解决,

set(A) – set(B)

这个思路是用集合的概念去解决,‘-’号是集合中的差补,就是求出的新集合只能属于集合A,但不属于集合B,这种方式要比第一种要快很多,有喜欢的小伙伴可以做个测试,给大家分享下测试结果,这篇就到这里,关于Python的数据类型我们就全部介绍完了,在这些基础上我们接下来要了解语句结构例如If/else,for循环语句等。

如果喜欢这系列文章,请大家帮忙转发,您的转发是我继续写的动力,谢谢。

python基础5-字典

字典是python中的映射数据类型,映射类型对象里哈希值key,指向对象value,如果value是多个,就是一对多关系,字典是以键值对的形式存在的,在Python的数据类型中,字典数据类型算是比较重要的数据类型,在后续web编程中经常会用到字典数据类型去传递数据和渲染模板,所以这个数据类型是我们要花时间必须熟练掌握的数据类型,往下我们介绍字典常见操作。

1、创建字典,字典是{}形式的,所以{}就表示是个空字典,当然我们也可以给赋值给一个字典,例如:

这里建了三个字典,第一个表示是空字典,创建字典是注意,Key必须是不可变对象,必须是可hash,以为访问字典是通过key的hash值去访问的,所以像字符串,元组就可以做为Key,列表是可变对象,就不可以做为key,字典的值可以是字符,数字,列表等数据类型。

我们还可以用内置函数dict()来创建字典:

 

另外我们还可以通过表达式的方式创建一个字典:

 

2、字典的值访问,可以通过key去访问字典中的某个值,如果要遍历一个字典就用for循环,如下:

还有一种方式是用Item()函数:

3、字典更新和增加元素,如果字典中的键已经存在就更新这个键对应的值,如果没有就会新增一个键值对数据,例如:

4、删除字典元素和字典,日常脚本中最多的是删除某指定个元素,这是我们可以用pop()函数,如果要任意删除一个可以用popitem()函数,这个函数官方文档说的是删除任意元素,返回key,value,但实际运行的时候发现还是顺序一个一个来删的,测试了几个没有找到具体原因,有了解的可以探讨下, clear()函数会删除所有的条目,如下:

5、字典排序,前面我们说了,因为字典是无序的,但我们平时编写脚本时经常要对生成的字典进行排序, 方法如下:

itertems()函数得到字典的key,value, d[1]是字典的值,意思就是按值来排序,如果是d[0]那就是按键来排序,reverse默认是从小到大排列,True表示翻转就是从大到小排列。

6、其它常用的方法

items():返回字典的key,value

keys(): 返回字典的key

get(key[,d]) :返回key对应的值,如果不存在返回None

update(d2): 将一个字典添加到现在字典中

len():  返回字典长度

values() :返回字典的value

setdefault(key[,d]) : 如果字典中不存在这个键就给它设置成默认值。

关于字典就介绍到这里,欢迎小伙伴帮忙转发。

python基础5-元组操作

这周我们接着说python的数据类型,我们之前几周说了数字,字符串和列表数据类型,这篇我们说python中的元组和集合数据类型,让我们先从元组开始。

谈起元组,有了解的可能会觉得这个类型跟列表是非常相似的,操作方面也基本雷同,不过他们本质的区别是,元组是不可变数据类型,还记得我们之前提到过的字符串也是不可变数据类型吗?让我们再回顾下什么是不可变性,不可变性就是一旦一个对象被定义了,它的值就不能再本更新,除非是重新创建一个新的对象,那元组跟字符串的区别是,元组是一个容器对象,它可以包含一个或多个元素,基本特性我们 就介绍了这里,接下来我们看看具体的一些例子:

1、元组创建

这里第一行就创建了一个空的元组,然后创建了一个保护三个元素的元组,元组的创建在这里要注意一点,如果你的元组里只有一个元素,要采用元素后加一个逗号的方式来表示,这个叫单元素元组,直接用(元素)的方式是不行的,例子如下:

2、获取元组值

前面我们说过,元组的数据类型跟列表基本一样,它也支持切片,下标的方式去访问容器的值,例如:

因为元组是容器类型,所以它也可以包含一个列表作为元素,访问值得时候可以通过切片方式访问其中的值,如果访问的值不存在就会显示超出索引范围的错误。

3、元组更新

前面提到过因为元组是不可变类型,前面平时我们切片的操作也只是读取,不能够进行值得替换,否则会报错。

如果要改变元组只能新创建一个新的对象:

通过id()函数就可以看出我们创建了一个新的对象,id()函数官方解释如下:

简单来说就是返回这个对象生命周期的一个唯一标示。

除了重新赋值,元组也支持“+”字符的操作,通过+字符可以把两个元组连接起来生成一个新的元组。

关于元组的元素更新,还有一个特别的地方,就是虽然元组是不可变类型,但它包含的元素如果是可变对象,就可以改变其中的值,假如一个元组中包含一个列表,那这个列表中的值是可以变化的。

3、列表和元组互转

如果有一个列表要转成元组,可以直接通过tuple()函数操作,如果元组要转成列表可通过list()函数操作,有了这2个函数,这两个容器类型的数据结构转换非常 方便。

除了这2个函数,还有一些常用的例如max(),min(),len()等函数。

 

 

 

python基础4-列表操作

上篇我们学习了python的字符串类型,了解了字符串的不变性,今天我们接着学习新的数据类型-列表,列表也是序列式的数据类型,跟字符串一样,支持下标和切片操作,但列表跟字符串不同的是它是可变类型,就是它是可以改变的,这个数据类型在后续我们编程中用的非常的多,比如将读出的IP放到列表中,然后读取执行,这些后续我们写实际脚本时再说,我们先从最基础的,如何创建列表开始:

1、创建列表方式,一种是用[],一种是用list()函数,这二种方法都可以创建一个列表,如下:

如果[]里什么都没有,就创建了一个空列表,在列表里的内容称为列表元素,元素类型可以使python支持的标准类型。

2、列表的元素数据访问,刚开始我们也说了,列表是序列类型,所以它支持切片和下标的访问,例子如下:

因为这个跟字符串操作非常类似,所以我们不在多说。

3、列表操作函数

关于列表的操作有很多的方便可用的函数,这里我们跟字符串一样,也挑一些比较常用的来举例说明下,其它函数如果后续用到我们再说。

append()函数: 作用是添加列表的元素在尾部,接收一个参数,然后将改元素加入列表的尾部,举例如下:

extend()函数:作用是扩展一个列表,这个函数类似把两个列表相加,例如:

remove() : 作用根据指定的值删除一个元素,当列表元素被删除后,位于它后面的元素自动迁移,然后列表长度减一,举例:

pop():这个函数会返回指定下标位置的元素,如果不给指定下标,它默认使用-1,例如pop(0)返回列表的头元素,pop()返回列表的尾部元素,但这个函数在获取后就会自动将这个元素在列表中删除,例如:

如果这个函数不带参数会比较有意思,因为它跟append()函数的作用相反,一个是从尾部加,一个是从尾部减,这个结构就是大学数据结构课程中的-栈,即后进先出,可以假设有个空列表,运行append()就是压栈的操作,pop()就是出栈的操作,那如果加入下标0,即pop(0),那这样列表就形成了一个队列,跟去公园买票排队一样,先进来的先出去,即先进先出,这也是一种队列方式,这两种方式在后续编程中非常有用,如果后续我们有用到,我们会详细说。

count()函数用来统计列表中元素的重复个数,如果我们生成了一个列表,想要获取某元素在列表中出现的次数,可以用这个函数,例如:

len()函数,跟字符串的len函数功能一样,返回列表的长度,这个比较简单就不多说了。

基本函数我们就说讲这么多,后续有特殊的我们详细再谈,接下来我们说一下列表的一些关系操作

4、列表关系操作,in, not in

关系操作就是检查判断一个对象是不是一个列表的成员,如果存在返回True, 否则返回False, 一般常用与条件语句中,例如:

具体的条件语句我们后续会单独详细说,在这里就不展开了,这种关系操作后续编程中也非常有用。

5、列表转字符串操作

在日常处理列表中,有一个比较常见的操作就是要求将一个列表转成一个字符串,这里我们可以用join()函数实现,例如:

6、列表解析,这部分内容我们在讲循环的语句的时候会单独说,它在编程中也比较常用,这个功能可以让我们动态的生成列表。

写到这我们也基本把列表也说完了,除了这些数据类型,理解python的赋值语句(等于号)也非常关键,在最后我给出一个例子,请大家一起理解下这些语句的意义,如果有问题可以留言交流。

关于列表的学习就到这里,欢迎大家留言交流,如果觉得还不错,请帮忙转发。

python基础3-字符串操作(2)

这篇我们接上一篇把字符串类型没有说的完的接着说完,我们先说字符串的不变性,在Python中字符串类型是一种不可变的数据类型,就是说它的值不能被改变或修改,那什么意思呢,就是我们如果要想修改一个字符串就只能通过生成一个新字符串的方式来操作,也许有的小伙伴会说,不是呀,字符串是能修改的呀,比如这个例子:

这看起来像是字符串可变,但实际上在Python内部自动为你创建了一个新的字符串,这2个语句是赋值语句,后者覆盖了前者,那你可能会问,那字符串的不变性体现在哪里呢?我们接着看下一个例子:

目前看没什么问题,我们都可以理解,下面我修改foo的值,在输出ba的值:

结果跟你想的一样吗?是不有人说,应该输出"hanging on in spam”才对呀,因为我重新给foo赋值了呀, 抱歉,即使你跟foo重新赋了值,但ba的值仍然不变,因为ba是一个新的字符串,这就是字符串的不变性,它一旦被创建就不再改变。

关于字符不变性我们就说到这里,接下来我们开始了解一些字符串内建操作函数,因为字符串内建函数非常的多,我不可能全部写出来,所以就挑了一些相对比较常用的来说了:

1、len():这个最简单,统计字符床长度的(包括空格),一般用于我们条件判断中,比如我们看下ba的长度:

2、strip():这个函数用来去掉字符串左右空格,这个函数比较有用,一般我们从文本中读出来的字符都要先strip(),确保它没带特殊字符,除了strip(),还有lstrip(),rstrip(),就是去掉字符串的左空格和有空格,如下:

3、join(seq):这个函数用来把一个序列的元素合并成一个新的字符串,比如我们要将一个列表中的元素合并成一个字符串,关于列表数据类型我们下篇会说,例子如下:

4、split(seq,num):这个函数用来把字符串分割成一个列表,其中seq是分隔符,num是分割的次数(可省),例如:

5、replace(s1,s2,num): 这个函数需要三个参数,num参数非必须,s1将会替换成s2, 这个在做字符串替换时非常有用,例如:

6、encode(encoding,errors):字符串的编码,这个函数让我们轻松应对字符串的编码问题,其中encoding可以有很多中,例如常见的有gb2312 gbk gb18030 bz2 zlib big5 bzse64等,最场景的应用就是在写入文件之前统一将字符串编码格式进行转换为utf-8类型,然后写入文件中:

7、startswith(s,start,end):这个函数判断字符串的开头是否以s开始,如果是返回True,否则返回False,记住这个函数返回的是一个bool值,不是返回字符串,你要实现类似shell中的grep功能,就需要自己加个判断,然后print输出,例如:

想对于的还有endswith,用法基本类似,就不在举例了。

关于字符串的内建函数部门就暂时说这么多吧,后续如果有用到其它函数我们单独在说,最后我再强调一下,python中字符串对象是不可改变的,我们一旦创建一个字符串后,我们在上面用任何函数的改变都会返回一个新的字符串,原串并没有变,所以在日后的编程中要注意这一点。

写在最后:码字不易,如果觉得不错,还请大家帮忙转发。