大数协python训练营打卡笔记Task04

一、学习知识点概要

(一)列表(定义、创建、添加、删除、获取、常用操作符、其他方法)

(二)元组(创建和访问、更新和删除、相关操作符、内置和解压)

二、学习内容

(一)列表

1.列表的定义:

列表是有序集合,没有固定大小,能够保存任意数量任意类型的 Python 对象。

语法为[元素1,元素2,……]。

注意:中括号 逗号

中括号:把所有元素绑在一起;逗号:将每个元素一一分开

2.列表的创建

①创建一个普通列表

x = [1,2, 3, 4, 5, 6, 7,8]
print(x, type(x))

②利用range()创建列表

可以递增也可以递减

x = list(range(1, 11, 2))
print(x, type(x))
# [1, 3, 5, 7, 9] <class 'list'>
x = list(range(10, 1, -2))
print(x, type(x))
# [10, 8, 6, 4, 2] <class 'list'>

③利用推导式创建列表

x = [i for i in range(10, 1, -2)]
print(x, type(x))

④创建一个4x3的二维数组

x = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]]
print(x, type(x))

注意

1、由于list的元素可以是任何对象,因此列表中所保存的是对象的指针。即使保存一个简单的[1,2,3],也有3个指针和3个整数对象。

2、[a]*4操作中,只是创建4个指向list的引用,所以一旦a改变,x中4个a也会随之改变。⑤创建混合列表

⑤创建混合列表

mix = [1, 'lsgo', 3.14, [1, 2, 3]]
print(mix, type(mix))  
# [1, 'lsgo', 3.14, [1, 2, 3]] <class 'list'>

⑥创建空列表

empty = []
print(empty, type(empty))  # [] <class 'list'>

注意:列表内容是可更改的,因此可以用到append、extend来附加;insert来插入、remove和pop来删除。

3.向列表中添加元素

①list.append(obj)

在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。若被增加的元素是一个 list,那么这个 list 将作为一个整体进行追加。

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append('Thursday')
print(x)  

②list.extend(seq)

在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend(['Thursday', 'Sunday'])
print(x)  

注意:【append和extend的区别】

严格来说append是追加,把一个东西整体添加在列表后,而extend是扩展,把一个东西里的所有元素添加在列表后。

③list.insert(index.obj)

在编号index位置插入obj

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.insert(2, 'Sunday')
print(x)

4.删除列表中的元素

①list.remove(obj)

移除列表中某个值的第一个匹配项

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
x.remove('Monday')
print(x)  # ['Tuesday', 'Wednesday', 'Thursday']

②list.pop([index=-1])

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
y = x.pop()
print(y)  # Friday

y = x.pop(0)
print(y)  # Monday

注意:【remove和pop的区别】

remove和pop都可以删除元素,前者是指定具体要删除的元素,后者是指定一个索引。

【删除单个或多个对象:】

`del var1[, var2 ……]` 

【删除的元素是否再次使用】

如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。

5.获取列表中的元素

通过元素的索引值,从列表获取单个元素(列表索引值是从0开始的)。

让python返回最后一个列表元素则索引指定为-1,返回倒数第二个列表元素则索引指定为-2.

切片的通常写法:start:stop:step

①"start:"

以step 为 1 (默认) 从编号start往列表尾部切片。

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x[3:])  # ['Thursday', 'Friday']
print(x[-3:])  # ['Wednesday', 'Thursday', 'Friday']

②":stop"

以step为 1 (默认) 从列表头部往编号stop切片。

week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:3])  # ['Monday', 'Tuesday', 'Wednesday']
print(week[:-3])  # ['Monday', 'Tuesday']

③"start:stop"

以step为 1 (默认) 从列表头部从编号start往编号stop切片。

week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:3])  # ['Tuesday', 'Wednesday']
print(week[-3:-1])  # ['Wednesday', 'Thursday']

④"start:stop:step"

以具体的step 从列表头部从编号start往编号stop切片。若step设置为-1,则相当于将列表反向排列。

week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:4:2])  # ['Tuesday', 'Thursday']

⑤":"

复制列表中的所有元素(浅拷贝)。

week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:])  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

【浅拷贝和深拷贝】

6.列表的常用操作符

等号操作符:==

连接操作符 +

重复操作符 *

成员关系操作符 innot in

「等号 ==」,只有成员、成员位置都相同时才返回True。

列表拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。

注意

前面三种方法(append、extend、insert)可对列表增加元素,它们没有返回值,是直接修改了原数据对象。 而将两个list相加,需要创建新的 list 对象,从而需要消耗额外的内存,特别是当 list 较大时,尽量不要使用 “+” 来添加list。

7.列表的其他方法

①list.count(obj):统计某个元素在列表中出现的次数

②list.reverse():反向列表中元素

③list.sort(key=None,reverse=False):对原列表进行排序

 (1)key--主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

 (2)reverse--排序规则,reverse = True 降序,reverse = False 升序(默认)。

 (3)该方法没有返回值,但是会对列表的对象进行排序。

(二)元组

「元组」定义语法为:(元素1,元素2,……)

每个元素都用逗号隔开,小括号将所有元素括起来。

1. 创建和访问一个元组

【元组和列表的区别】

①元组与列表类似,不同之处在于元组被创建后就不能对其进行修改,类似字符串。

②元组使用小括号,列表使用方括号。

③元组与列表类似,也用整数来对它进行索引 (indexing) 和切片 (slicing)。

t1 = (2, 1.1, 'python')
t2 = 2, 1.1, 'python'
print(t1, type(t1))
# (2, 1.1, 'python') <class 'tuple'>

注意:

创建元组可以用小括号 ()或不用,为了可读性,建议还是用 ()。

元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。

2.更新和删除一个元组

元组有不可更改 (immutable) 的性质,因此不能直接给元组的元素赋值,但是只要元组中的元素可更改 (mutable),那么我们可以直接更改其元素,注意这跟赋值其元素不同。

【例子】

t1 = (1, 2, 3, [4, 5, 6])
print(t1)  # (1, 2, 3, [4, 5, 6])

t1[3][0] = 9
print(t1)  # (1, 2, 3, [9, 5, 6])

3.元组相关的操作符

等号操作符:==

连接操作符 +

重复操作符 *

成员关系操作符 innot in

「等号 ==」,只有成员、成员位置都相同时才返回True。

元组拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。

4.内置方法(两种)

①count('python')是记录在元组t中该元素出现几次,显然是 1 次

②index(1.1)是找到该元素在元组t的索引,显然是 1

5.解压元组

解压一维元组、二维元组、只想要元组其中几个元素、不在乎rest变量

三、学习问题与解答(自己遇到的问题+课后题)

【自己遇到的问题】

1.不太理解浅拷贝与深拷贝

【课后题】 

一、列表lst 内容如下

lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]

请写程序完成下列操作:

  1. 在列表的末尾增加元素15

  2. 在列表的中间位置插入元素20

  3. 将列表[2, 5, 6]合并到lst中

  4. 移除列表中索引为3的元素

  5. 翻转列表里的所有元素

  6. 对列表里的元素进行排序,从小到大一次,从大到小一次

1.

lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst.append(15)

2.

lst.insert(5,20)

3.

lst.append([2,5,6])

4.

lst.pop(3) 

5.

lst.reverse()

6.从小到大:

lst.reverse或lst.sort

二、修改列表

lst = [1, [4, 6], True]

请将列表里所有数字修改成原来的两倍

lst = [1, [4, 6], True]
lst*=2

写了才认识到*是重复符,不会让列表中的数字变成原来的两倍

三、leetcode 852题 山脉数组的峰顶索引

看都看不懂……

四、写出下面代码的执行结果和最终结果的类型

1.

(1,2)*2
#(1, 2, 1, 2)
t2=(1,2)*2
print(type(t2))
#<class 'tuple'>

2.

(1,)*2
#(1, 1)
t3=(1,)*2
print(type(t3))
#<class 'tuple'>

 3.

(1)*2
#2
t4=(1)*2
print(type(t4))
#<class 'int'>

 五、拆包

四、学习思考与总结

1.列表推导式

x = [i for i in range(10)]

 还可以添加上if语句:

x = [i for i in range(10) if i % 2 == 0]

执行顺序:①首先执行列表推导式;②执行if分句;③最后才执行左侧的表达式

更复杂的列表推导式:嵌套

 

 【总结】

①因为这两天事情比较多所以做得很赶,这部分的学习加笔记用时大概在六个小时

②课后题也没有写完,会在明天下午16:30前自己补充完整。

③字符串没有学完 会整理在下次的笔记中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值