知识点一:列表、集合、元组、字典的区分及各自使用方法

 

列表list

元组tuple

字典dictionary

集合set

是否可变

可变

不可变

可变

可变

是否有序

有序

有序

无序

无序

元素是否重复

可重复

可重复

键不可重复

不可重复

定义符号

[]

()

{key:value}

{}

创建

1.[]直接创建

2.list()

3.列表生成式

1.()直接创建

2.tuple()

1.{}直接创建

2.dictkey1=value1

3.dictziplist1list2))

1.{}直接创建

2.set()

删除

1.del删除元素或者列表

2.list.removevalue

3.list.pop()

1.del删除元素或元组

1.del删除元素或字典

2.

1.del删除元素或集合

2.set.remove()

3.set.pop()

4.set.clear()

修改插入

1.append()

2.insert()

3.+

4.extend()

不可修改

1.dict[key]=value

s.add()

访问,遍历

1.索引访问

2.for循环遍历

for i in list

for indexi in enumeratelist

1.索引访问

2.for循环遍历

1.键访问

2.get()访问

3.for keyvalue in dict.items()

for key in dict.keys()

for value in dict.values()

for循环遍历

生成式

[i*i for i in list1]返回列表

i*i for i in list1)返回生成器对象,通过fornext()访问

dict={i:j for i,j in zip(list1,list2)}

dict={i*2:2 for i in range(1,10)}

交集&,并集|,差集-

切片

支持切片

支持切片

不支持切片

不支持切片

索引

支持索引

支持索引

不支持索引

不支持索引

+*

支持

支持

不支持

不支持

其他

不能作为字典的键

可以作为字典的键

 

 

 

知识点二:切片操作

1、Python可切片对象的索引方式

包括:正索引和负索引两部分,如下图所示,以a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

Python期末复习——第二章

 

2、Python切片操作的一般方式

一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数step=1。

切片操作基本表达式:object[start_index:end_index:step]

step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情说三遍!

start_index:表示起始索引(包含该索引本身);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

end_index:表示终止索引(不包含该索引本身);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。

3、 Python切片操作详细例子

以下示例均以列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

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

1. 切取单个值

>>>a[0]

>>>0

>>>a[-4]

>>>6

2. 切取完整对象

>>>a[:] #从左往右

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

>>>a[::]#从左往右

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

>>>a[::-1]#从右往左

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

3. start_index和end_index全为正(+)索引的情况

>>>a[1:6]

>>> [1, 2, 3, 4, 5]

step=1,从左往右取值,start_index=1到end_index=6同样表示从左往右取值。

 

>>>a[1:6:-1]

>>> []

输出为空列表,说明没取到数据。

step=-1,决定了从右往左取值,而start_index=1到end_index=6决定了从左往右取值,两者矛盾,所以为空。

 

>>>a[6:1]

>>> []

同样输出为空列表。

step=1,决定了从左往右取值,而start_index=6到end_index=1决定了从右往左取值,两者矛盾,所以为空。

 

>>>a[:6]

>>> [0, 1, 2, 3, 4, 5]

step=1,从左往右取值,从“起点”开始一直取到end_index=6。

 

>>>a[:6:-1]

>>> [9, 8, 7]

step=-1,从右往左取值,从“终点”开始一直取到end_index=6。

 

>>>a[6:]

>>> [6, 7, 8, 9]

step=1,从左往右取值,从start_index=6开始,一直取到“终点”。

 

>>>a[6::-1]

>>> [6, 5, 4, 3, 2, 1, 0]

step=-1,从右往左取值,从start_index=6开始,一直取到“起点”。

4. start_index和end_index全为负(-)索引的情况

>>>a[-1:-6]

>>> []

step=1,从左往右取值,而start_index=-1到end_index=-6决定了从右往左取值,两者矛盾,所以为空。

索引-1在-6的右边(如上图)

 

>>>a[-1:-6:-1]

>>> [9, 8, 7, 6, 5]

step=-1,从右往左取值,start_index=-1到end_index=-6同样是从右往左取值。

索引-1在6的右边(如上图)

>>>a[-6:-1]

>>> [4, 5, 6, 7, 8]

step=1,从左往右取值,而start_index=-6到end_index=-1同样是从左往右取值。

索引-6在-1的左边(如上图)

 

>>>a[:-6]

>>> [0, 1, 2, 3]

step=1,从左往右取值,从“起点”开始一直取到end_index=-6。

 

>>>a[:-6:-1]

>>> [9, 8, 7, 6, 5]

step=-1,从右往左取值,从“终点”开始一直取到end_index=-6。

 

>>>a[-6:]

>>> [4, 5, 6, 7, 8, 9]

step=1,从左往右取值,从start_index=-6开始,一直取到“终点”。

 

>>>a[-6::-1]

>>> [4, 3, 2, 1, 0]

step=-1,从右往左取值,从start_index=-6开始,一直取到“起点”。

5. start_index和end_index正(+)负(-)混合索引的情况

>>>a[1:-6]

>>> [1, 2, 3]

start_index=1在end_index=-6的左边,因此从左往右取值,而step=1同样决定了从左往右取值,因此结果正确

 

>>>a[1:-6:-1]

>>> []

start_index=1在end_index=-6的左边,因此从左往右取值,但step=-则决定了从右往左取值,两者矛盾,因此为空。

 

>>>a[-1:6]

>>> []

start_index=-1在end_index=6的右边,因此从右往左取值,但step=1则决定了从左往右取值,两者矛盾,因此为空。

 

>>>a[-1:6:-1]

>>> [9, 8, 7]

start_index=-1在end_index=6的右边,因此从右往左取值,而step=-1同样决定了从右往左取值,因此结果正确。

 

6. 连续切片操作

>>>a[:8][2:5][-1:]

>>> [4]

相当于:

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

a[:8][2:5]= [2, 3, 4]

a[:8][2:5][-1:] = 4

理论上可无限次连续切片操作,只要上一次返回的依然是非空可切片对象。

7. 切片操作的三个参数可以用表达式

>>>a[2+1:3*2:7%3]

>>> [3, 4, 5]

即:a[2+1:3*2:7%3] = a[3:6:1]

8. 其他对象的切片操作

前面的切片操作说明都以list为例进行说明,但实际上可进行的切片操作的数据类型还有很多,包括元组、字符串等等。

>>> (0, 1, 2, 3, 4, 5)[:3]

>>> (0, 1, 2)

元组的切片操作

 

>>>'ABCDEFG'[::2]

>>>'ACEG'

字符串的切片操作

 

>>>for i in range(1,100)[2::3][-10:]:

       print(i)

就是利用range函数生成1-99的整数,然后取3的倍数,再取最后十个。

4、 常用切片操作

以列表:a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 为说明对象

1.取偶数位置

>>>b = a[::2]

[0, 2, 4, 6, 8]

2.取奇数位置

>>>b = a[1::2]

[1, 3, 5, 7, 9]

3.拷贝整个对象

>>>b = a[:] #★★★★★

>>>print(b) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>>print(id(a)) #41946376

>>>print(id(b)) #41921864

>>>b = a.copy()

>>>print(b) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>>print(id(a)) #39783752

>>>print(id(b)) #39759176

需要注意的是:[:]和.copy()都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用,而不是独立分配内存。

>>>a = [1,2,['A','B']]

>>>print('a={}'.format(a))

>>>b = a[:]

>>>b[0] = 9 #修改b的最外层元素,将1变成9

>>>b[2][0] = 'D' #修改b的内嵌层元素

>>>print('a={}'.format(a))

>>>print('b={}'.format(b))

>>>print('id(a)={}'.format(id(a)))

>>>print('id(b)={}'.format(id(b)))

a=[1, 2, ['A', 'B']] #原始a

a=[1, 2, ['D', 'B']] #b修改内部元素A为D后,a中的A也变成了D,说明共享内部嵌套元素,但外部元素1没变。

b=[9, 2, ['D', 'B']] #修改后的b

id(a)=38669128

id(b)=38669192

 

4.修改单个元素

>>>a[3] = ['A','B']

[0, 1, 2, ['A', 'B'], 4, 5, 6, 7, 8, 9]

5.在某个位置插入元素

>>>a[3:3] = ['A','B','C']

[0, 1, 2, 'A', 'B', 'C', 3, 4, 5, 6, 7, 8, 9]

>>>a[0:0] = ['A','B']

['A', 'B', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

6.替换一部分元素

>>>a[3:6] = ['A','B']

[0, 1, 2, 'A', 'B', 6, 7, 8, 9]

知识点三:Python的常用函数及方法

函数

1、len()   函数计算括号内字符串包含多少个字符

2、ord()  函数获取字符的整数表示
3、chr()  函数把编码转换为对应的字符
Pythonbytes类型的数据用带b前缀的单引号或双引号表示:

注意区分'ABC'b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

4、abs() 函数求绝对值
5、max() 函数,返回接收的多个参数中最大的那个

方法

1、encode() 方法可以编码为指定的bytes
2、decode() 方法可以把bytes变为str

注:如果bytes中包含无法解码的字节,decode() 方法会报错。

3、format() 方法用传入的参数依次替换字符串内的占位符{0}{1}…… (格式化字符串)

注:  {1:.1f}   表示保留小数点1 ,其中f 指浮点数float类型

这里推荐两个写的比较详细的链接:

https://www.cnblogs.com/xinxinyo/p/10394842.html

https://www.cnblogs.com/nice107/p/8118876.html

补充一个函数:range()函数:

python range() 函数可创建一个整数列表,一般用在 for 循环中。

range(start, stop[, step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

注:range函数中:左取右不取

知识点四:内置函数

这里直接推荐一个链接,介绍的十分详细:

https://blog.csdn.net/y472360651/article/details/73132553

知识点五:列表排序

方法一:

list3= [91, 95, 97, 99, 92, 93, 96, 98]

list3.sort() #降序:list3.sort(reverse=True)

print(list3)

方法二:

nums = [1, 2, 6, 3, 9, 7, 5]

print(nums)

print(sorted(nums)) #按数字从小到大排序

print(sorted(nums, reverse=True)) #按数字从大到小排序

方法三:

要反转列表元素的排列顺序,可使用方法reverse()。(倒序输出)

知识点六:列表合并

方法一(代码最长):

list1 =  [91, 95, 97, 99] 

list2 =  [92, 93, 96, 98]

#建立一个空列表

list_new = []

#利用append函数将list1中元素依次放入list_new中

for item in list1:

  list_new.append(item)

#利用append函数将list1中元素依次放入list_new中

for item in list2:

  list_new.append(item)

#打印list_new列表

print(list_new)

方法二(适中):

a = [1,2,3]

b = [4,5,6]

c = zip(a,b) #c = [(1,4),(2,5),(3,6)]

list_new = [row[i] for i in range(len(0)) for row in c]

print(list_new)

方法三(最简单):

(1)

list1 =  [91, 95, 97, 99] 

list2 =  [92, 93, 96, 98]

list3 = list1 + list2

print(list3)

(2)

list1 =  [91, 95, 97, 99] 

list2 =  [92, 93, 96, 98]

# 把 list1赋值给一个新列表,用来存合并的元素——这个细节要注意!

list3 =list1

list3.extend(list2)

print(list3)

知识点七:Lambda表达式

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了。

lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。如下所示:

add = lambda x, y : x+y

add(1,2)  # 结果为3

那么到底要如何使用lambda表达式呢

1、应用在函数式编程中

Python提供了很多函数式编程的特性,如:map、reduce、filter、sorted等这些函数都支持函数作为参数,lambda函数就可以应用在函数式编程中。如下:

# 需求:将列表中的元素按照绝对值大小进行升序排列

list1 = [3,5,-4,-1,0,-2,-6]

sorted(list1, key=lambda x: abs(x))

2、应用在闭包中

def get_y(a,b):

     return lambda x:ax+b

y1 = get_y(1,1)

y1(1) # 结果为2

lambda应用举例:

1、计算最大值:

_lamd = lambda x, y: max(x, y)

print(_lamd(10, 222))

结果:222

2、计算输入的和:

_lamd = lambda x, y: x + y

print(_lamd(10, 222))

结果:232

知识点八:带*/**的数字和列表

1、表示乘号

2、表示倍数,例如:

def T(msg,time=1):

    print((msg+' ')*time

T('hi',3)

打印结果(打印3次):

结果:hi hi h

3、单个 *

(1)、如:*parameter是用来接受任意多个参数并将其放在一个元组中。

>>> def demo(*p):

    print(p)

>>> demo(1,2,3)

(1, 2, 3)

(2)、函数在调用多个参数时,在列表、元组、集合、字典及其他可迭代对象作为实参,并在前面加 *

如   *(1,2,3)解释器将自动进行解包然后传递给多个单变量参数(参数个数要对应相等)。

>>> def d(a,b,c):

    print(a,b,c)

>>> d(1,2,3)

1 2

>>> a=[1,2,3]

>>> b=[1,2,3]

>>> c=[1,2,3]

>>> d(a,b,c)

[1, 2, 3] [1, 2, 3] [1, 2, 3]

>>> d(*a)

1 2 3

提示:序列解包要在关键参数和  **参数 之前进行处理

4、两个 **  如:    **parameter用于接收类似于关键参数一样赋值的形式的多个实参放入字典中(即把该函数的参数转换为字典)。

>>> def demo(**p):

    for i in p.items():

        print(i)

>>> demo(x=1,y=2)

('x', 1)

('y', 2)

知识点九:应用于逻辑判断的关键字

1、

Python期末复习——第二章

 

2、关键字 

Python期末复习——第二章

Python期末复习——第二章

Python期末复习——第二章

3、运算结果

Python期末复习——第二章

Python期末复习——第二章

 

相关文章:

  • 2022-12-23
  • 2021-09-03
  • 2021-07-22
  • 2022-02-08
  • 2021-11-30
  • 2022-12-23
  • 2021-06-19
  • 2022-12-23
猜你喜欢
  • 2021-06-04
  • 2021-12-11
  • 2022-02-15
  • 2021-07-03
  • 2021-10-17
  • 2021-07-04
  • 2021-10-03
相关资源
相似解决方案