Python学习笔记(二)

一、基本运算符

        除了Python学习笔记(一)中提到的“+”、“-”、“*”、“/”、“//”、“%”等运算符,还包括以下:

① or、and、not,布尔或、布尔与、布尔非;

② is、is not,同一性判断,判断是否为同一个对象;

③ <、<=、>、>=、!=、==,比较值是否相当,可以连用

④ | 、^、&,按位或、按位异或、按位与

⑤ <<,>> 移位

⑥~ 按位翻转

⑦ +,-,*,/,//,% 加、减、乘、浮点除、整数除、取余

⑧**,幂运算

其中,

异或^指的是,若两数相同为0,不相同为1。

若想打印二进制表示方法,可用bin()。

<<左移1位相当于乘以2,左移2位相当于乘以4。

>>右移1位相当于除以2。

加法操作

(1)数字相加,3+2,5

(2)字符串拼接,“3”+“2”,"32"

  (3)  列表、元组等合作,[10,20,30]+[5,10,100],[10,20,30,5,10,100]

乘法操作

(1)数字相乘, 3*2,  6

(2)字符串复制,“sxt” *3,   "sxtsxtsxt"

(3)列表、元组等复制,[10,20,30]*3,   [10,20,30,10,20,30,10,20,30]

二、复合赋值运算符

复合赋值可以让程序更加精炼,提高效率。

1、 +=,加法赋值/字符串拼接,sum+=n; a +="sxt",   sum=sum+n; a = a+"sxt"

2、 -=,减法赋值,num -=n,num = num - n

3、 *=,乘法赋值,a *=b,a = a*b

4、 /=,浮点除赋值,a/=b,a = a/b

5、 //=,整数除赋值,a//=b,a =a//b

6、 %=,取余赋值,a%=b,a = a%b

7、 **=,幂运算赋值,a**=2,a=a**2

8、 <<=,左移赋值,a<<=2, a=a<<2

9、 >>=,右移赋值,a>>=2,a=a>>2

10、 &=,按位与赋值,a&=b,a=a&b

11、|=,按位或赋值,a|=b,a=a|b

12、^=,按位异或赋值,a^=b, a=a^b

注意:与C和Java不一样,Python不支持自增(++)和自减(--)

三、运算符优先级问题

优先级如下,从高到底

1、 **,指数(最高优先级)

2、~,按位翻转

3、* / % // ,乘、除、取模、取整数

4、+ -,加法减法

5、>> <<,右移,左移运算符

6、&,位“and”

7、^ |,位运算符

8、<= < > >=,比较运算符

9、< > == !=,等于运算符

10、= %= /= //= -= += *= **=,赋值运算符

11、is is not,身份运算符

12、in not in,成员运算符

13、not or and,逻辑运算符

实际使用中,记住如下简单的规则即可,复杂的表达式一定要使用小括号组织。

① 乘除优先加减

② 位运算和算术运算>比较运算符>赋值运算符>逻辑运算符

第3章  序列

    序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一个整数序列[10,20,30,40],可以这样示意表示:

由于python 3中一切皆对象,在内存中实现是按照如下方式存储的:

a=[10,20,30,40]

从图示中,我们可以看出序列中存储的是整数对象的地址,而不是整数对象的值。

python中常用的序列结构:字符串、列表、元组、字典、集合。

一、列表简介

列表:用于存储任意数目、任意类型的数据集合

列表是内置可变序列,是包含多个元素的有序连续的内存空间。列表定义的标准语法格式:

a = [10, 20, 30, 40]

其中,10,20,30,40这些称为:列表a的元素。

列表中的元素可以各不相同,可以是任意类型。比如:

b = [10, 20, 'abc', True]

列表对象的常用方法:

1、 list.append(x),增加元素,将元素x增加到列表list尾部

2、 list.extend(alist),增加元素,将alist所有元素加到列表list尾部

3、 list.insert(index,x),增加元素,在列表指定位置index处插入元素x

4、 list.remove(x),删除元素,在列表list中删除首次出现的指定元素x

5、 list.pop([index]),删除元素,删除并返回列表list指定为止 index处的元素,默认是最后一个元素

6、 list.clear(),删除所有元素,删除列表所有元素,并不是删除列表对象

7、 list.index(x),访问元素,返回第一个x的索引位置,若不存在x元素抛出异常

8、 list.count(x),计数,返回指定元素x在列表list中出现的次数

9、 len(list),列表长度,返回列表中包含元素的个数

10、list.reverse(),翻转列表,所有元素原地翻转

11、list.sort(),排序,所有元素原地排序

12、list.copy(),浅拷贝,返回列表对象的浅拷贝

python的列表大小可变,根据需要随时增加或缩小

字符串和列表都是序列类型,一个字符串是一个字符序列,一个列表是任何元素的序列。

二、列表的创建

1、基本语法[]创建

a=[10,20,'carol','sxt']

a=[]   #创建一个空的列表对象

2、list()创建

使用list()可以将任何可迭代的数据转化成列表

a=list()   #创建一个空的列表对象

a=list(range(10))

a=[0,1,2,3,4,5,6,7,8,9]

a=list("abc")

a=["a","b","c"]

3、range()创建整数列表

range()可以帮助我们非常方便的创建整数列表,语法格式为

range([start,] end [,step])

start参数:可选,表示起始数字。默认是0。

end参数:必选,表示结尾数字。

step参数:可选,表示步长,默认为1。

python3 中 range()返回的是一个range对象,而不是列表。我们需要通过list()方法将其转换成列表对象。

典型示例如下:

list(range(3,15,2))

[3,5,7,9,11,13]

list(range(15,3,-1))

[15,14,13,12,11,10,9,8,7,6,5,4]

list(range(3,-10,-1))

[3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9]

4、推导式生成列表

a=[x*2 for x in range(5)]  #循环创建多个元素

a=[0, 2, 4, 6, 8]

a=[x*2 for x in range(100) if x%9==0]

a=[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]

三、列表元素的增加

当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及列表元素的大量移动,效率较低。除非必要,我们一般只在列表尾部添加元素或删除元素,这样会大大提高列表的操作效率。

1、append()方法

原地修改列表对象,是真正的列表尾部添加新的元素,速度最快,推荐使用。

a = [20, 40]

a.append(80)

a = a[20, 40, 80]

2、+运算符操作

并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。

a=[20,40]

id(a)   46016072

a=a+[50]

id(a)   46015432

3、extend()方法

将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。

a=[20,40]

id(a)    46016072

a.extend([50, 60])

id(a)   46016072

4、insert()插入元素

使用insert()方法可以将指定元素插入到列表对象的任意指定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用,类似发生这种移动的函数还有:remove()、pop()、del(),它们在删除非尾部元素时也会发生操作位置后面元素的移动。

a=[10, 20, 30]

a.insert(2, 100)

a=[10, 20, 100, 30]

5、乘法扩展

使用乘法扩展列表,生成一个新列表,新列表元素时原列表元素的多次重复。

a=['sxt', 100]

b=a*3

b=['sxt', 100, 'sxt', 100, 'sxt', 100]

适用于乘法操作的,还有:字符串、元组。

四、列表元素的删除

1、del 删除

删除列表指定位置的元素。(实际上是数组元素的拷贝。)

a=[10, 20, 30]

del a[1]

a = [10, 30]

2、pop()方法

pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。(相当于弹出最后一个/指定位置元素。)

a = [10, 20, 30, 40, 50]

a.pop()   50

3、remove()方法

删除首次出现的指定元素,若不存在该元素抛出异常。(这里不是索引,直接操作内容)

a=[10, 20, 30,40, 50, 20,30]

a.remove(20)

a=[10, 30,40, 50, 20,30]

五、列表元素访问和计数

5.1 通过索引直接访问元素

索引的区间在[0,列表长度-1]这个范围。超过这个范围则会抛出异常。

5.2 index()获得指定元素在列表中首次出现的索引

index()可以获取指定元素首次出现的索引位置。语法是:index(value, [start, [end]])。其中,start和end 指定了搜索的范围。

a =[10, 20, 30, 40, 50, 20, 30, 20, 30]

a.index(20)

1

a.index(20, 3)   #从索引位置3开始,往后搜索的第一个20

5

a.index(30, 5, 7)  #从索引位置5到7这个区间,第一次出现30元素的位置

6

5.3 count()获得指定元素在列表中出现的次数

a = [10, 20, 30, 40, 50, 20, 30, 20, 30]

a.count(20)

3

5.4 len()返回列表长度

len()返回列表长度,即列表中包含元素的个数

a = [20, 30, 30]

len(a) = 3

5.5 成员资格判断

判断列表中是否存在指定的元素,我们可以使用count()方法,返回0则表示不存在,返回大于0则表示存在。但是,一般会使用更加简洁的in关键字来判断,直接返回True或False。

a = [10, 20, 30, 40, 50, 20, 30, 20, 30]

20 in a

True

100 not in a

True

六、切片操作

切片是Python序列及其重要的操作,使用于列表、元组、字符串等。切片的格式如下:

切片slice操作可以让我们快速提取子列表或修改。标准格式为:[起始偏移量 start:终止偏移量 end[:步长 step]]

注意:当步长省略时顺便可以省略第二个冒号

6.1 典型操作(三个量为正数的情况下)如下:

1、[:] ,提取整个列表,[10, 20, 30][:],   [10, 20, 30]

2、[start:]从start索引开始到结尾, [10, 20, 30][1:],    [20, 30]

3、[:end]从头开始直到end-1,  [10, 20, 30][:2],    [10, 20]

4、[start:end]从start到end-1, [10, 20, 30, 40][1:3],   [20, 30]

5、[start:end:step]从start提取到end-1,步长是step,[10, 20, 30, 40, 50, 60, 70][1:6:2], [20, 40, 60]

6.2 其他操作(三个量为负数)的情况:

1、 [10, 20, 30, 40, 50, 60, 70][-3:], 倒数三个 , [50, 60, 70]

2、[10, 20, 30, 40, 50, 60, 70][-5:-3],  倒数第五个到倒数第三个(包头不包尾), [30, 40]

3、[10, 20, 30, 40, 50, 60, 70][::-1],步长为负,从右到左反向提取,[70, 60, 50, 40, 30, 20, 10]

切片操作时,起始偏移量和终止偏移量不在[0, 字符长度-1]这个范围,也不会报错。起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成“长度-1”。

七、列表的遍历

for obj in listObj:

      print(obj)

八、列表排列

8.1 修改原列表,不建新列表的排序

a=[20, 10, 30, 40]

id(a)=46017416

a.sort()  #默认是升序排序

a=[10, 20, 30, 40]

a.sort(reverse=True)   #降序排列

a=[40, 30, 20, 10]

import random

random.shuffle(a)    #打乱顺序

a = [20, 40, 30, 10]

8.2 建新列表的排序

可以通过内置函数sorted()进行排序,这个方法返回新列表,不对原列表做修改。

a=[20, 10, 30, 40]

id(a) = 46016008

a = sorted(a)  #默认升序

a = [10, 20, 30, 40]

c = sorted(a, reverse=True)   #降序

8.3 reversed()返回迭代器

内置函数reversed()也支持进行逆序排列,与列表对象 reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。

a = [20, 10, 30, 40]

c = reversed(a)

list(c) = [40, 30, 20, 10 ] #该迭代器只能用一次,第二次返回空列表。

单独打印出c,发现提示是:list_reverseiterator,也就是一个迭代对象。同时,我们使用list(c)进行输出,发现只能使用一次。第一次输出了元素,第二次为空。那是因为迭代对象在第一次时已经遍历结束了,第二次不能再使用。

九、列表相关的其他内置函数汇总

9.1 max和min

用于返回列表中最大和最小值

a = [3, 10, 20, 15, 9]

max(a) = 20

min(a) = 3

9.2 sum

对数值型列表的所有元素进行求和操作,对非数值型列表运算则会报错。

a = [3, 10, 20, 15, 9]

sum(a) = 57

十、多维列表

10.1 二维列表

一维列表可以帮助我们存储一维、线性的数据。

二维列表可以帮助我们存储二维、表格的数据。

a= [["高小一", 18, 30000, "北京"], ["高小二", 19, 20000, "上海"], ["高小三", 20,10000, "深圳"]]

a[0][1]=18

a= [["高小一", 18, 30000, "北京"], ["高小二", 19, 20000, "上海"], ["高小三", 20,10000, "深圳"]]

for m in range(3):

    for n in range(4):

        print(a[m][n],end="\t")  #打印完一行,换行

    print() 

高小一  18      30000   北京
高小二  19      20000   上海
高小三  20      10000   深圳

学习参考:040【阶段1】元组_特点_创建的两种方式_tuple()要点_哔哩哔哩_bilibili

  • 47
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值