PYTHON知识点学习-列表和元组

106 阅读11分钟

对于列表来说,下标的有效范围是,从 0 到 长度-1

当我们下标超出有效范围时,尝试访问,就会出现异常!!2af5cb73e13c491895f83461d0e4bb42.png

#8.可以使用内建函数 len 来获取到列表的长度(元素个数),和字符串类似
a =[1,2,3,4]
print(len(a))

len 可以传字符串,列表,元组,字典,自定义的类...... =>动态类型~

#9.python 中的下标, 还可以写成负数!!
# 例如 写成-1, 其实等价于 len(a)-1
a=[1,2,3,4]
print(a[len(a) - 1])
# -1 就是倒数第一个元素!
print(a[-1])
#10. 可以通过索引的方式访问列表里面列表的元素。
#例如,我们有一个列表nested_list,其中包含两个列表[1, 2, 3]和[4, 5, 6],
#则可以通过以下方式访问它们的元素:
nested_list = [[1, 2, 3], [4, 5, 6]]
print(nested_list[0][1])
# 输出 2

print(nested_list[1][2])
# 输出 6

#在上面的例子中,[0]表示访问第一个列表,然后在该列表中再次使用索引[1]访问第二个元素。
#同样的方式,我们也可以访问第二个列表的第三个元素,即nested_list[1][2]。

2.3列表的切片操作

通过下标操作是 一次取出里面的一个元素.

通过切片, 则是一次取出一组连续的元素, 相当于得到一个 子列表

使用 [ : ] 的方式进行切片操作

切片操作中,[ ]里面有两个数字,表示了一段区间.

# 1. 切片操作的基本使用
a = [1,2,3,4]
print(a[1:3])

1 表示开始区间的下标

3 表示结束区间的下标

1:3-------->取到下标 为1 一直到 下标为 3 的元素!

(包含 1,不包含 3)-->[1,3)

切片操作是一个比较高效的操作,进行切片的时候,只取出了原有列表的一部分,并不涉及到"数据的拷贝",假设有一个很大的列表,进行切片,切片的范围也很大,即使如此,切片操作仍然非常高效

# 2. 使用切片的时候,省略边界.
a = [1,2,3,4]
#省略后边界, 意思是从开始位置,一直取到整个列表结束.
print(a[1:])
#省略前边界, 意思是从列表的 0 号元素开始取, 一直取到结束的后边界
print(a[:2])
#此处切片中的下标也可以写成负数.
print(a[:-1])
#还可以把开始边界和结束边界,都省略掉! 得到的还是列表自身.
print(a[:])

#--------------------------
#运行结果:
#[2, 3, 4]
#[1, 2]
#[1, 2, 3]
#[1, 2, 3, 4]

切片操作,还可以指定"步长". range

#3.带有步长的切片操作.
a=[1,2,3,4,5,6,7,8,9,0]
print(a[::1])
print(a[::2])
print(a[::3])
print(a[1:-1:2])

#运行结果:
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
#[1, 3, 5, 7, 9]
#[1, 4, 7, 0]
#[2, 4, 6, 8]

#4.步长数值还可以是负数.当步长为负数时,意思是从后面往前来取元素.
print(a[::-1])
print(a[::-2])

#运行结果:
#[0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# [0, 8, 6, 4, 2]
#5.当切片中的范围超出有效下标之后,不会出现异常! 而是尽可能把符合要求的元素获取到
a = [1,2,3,4,5,6,7,8,9,0]
print(a[1:100])

#运行结果:
# [2, 3, 4, 5, 6, 7, 8, 9, 0]

但是如果是下标索引,超出索引范围,就会发生越界异常

2.4列表的遍历操作

遍历:把列表里的每个元素,都依次取出来,并进行某种操作~[搭配循环使用]

#1.利用for循环来遍历列表
a = [1,2,3,4,5]
for elem in a:
    print(elem)
    
#运行结果:
# 1    
# 2
# 3
# 4
# 5

#2.使用 for 循环遍历,通过下标的方式.
a=[1,2,3,4,5]
for i in range(0,len(a)):
    print(a[i])

#运行结果:
# 1
# 2
# 3
# 4
# 5
#1.使用for 循环来遍历列表
a = [1,2,3,4,5]
for elem in a:
    elem = elem + 10
print(a)

#运行结果:
#[1, 2, 3, 4, 5]------------>列表元素值并未改变


#2.使用 for 循环遍历,通过下标的方式.
a=[1,2,3,4,5]
for i in range(0,len(a)):
    a[i] = a[i] + 10

print(a)

#运行结果:
#[11, 12, 13, 14, 15]------------>列表元素值在原来的基础上加 10

通过对比两种打印列表元素的结果可得出结论:

单纯for循环取a的每一个元素通过for循环****+下标访问
不能****够修改列表本身的值修改****列表本身的值
#3.使用 while 循环, 通过下标遍历.
a=[1,2,3,4,5]
i = 0
while i < len(a):
    print(a[i])
    i += 1

2.5列表的插入操作

#1. 使用 append 往列表末位新增一个元素.
a=[1,2,3,4]
a.append(5)
a.append("hello")
print(a)

b = [5,6,7,8]
b.append("world")
print(b)
#运行结果:
# [1, 2, 3, 4, 5, 'hello']
#[5, 6, 7, 8, 'world']

注意:此处的 append 搭配列表对象a,来一起使用的,而不是作为****一个独立的函数

这种要搭配对象来使用的函数(function),也叫做"方法"(method)

在python 中,对象,就可以视为是"变量"

type,print,input,len,自定义函数...... 都是独立的函数~

#2. 还可以使用 insert 方法,往列表里的任意位置来新增元素~
a = [1,2,3,4]
a.insert(1,"hello")
a.insert(100,"hello")
#(元素插入位置的下标,插入的元素)
print(a)

#运行结果:
#[1, 'hello', 2, 3, 4, 'hello']

2.6列表的查找和删除

#1. 使用 in 来判定某个元素是否在列表存在
a = [1,2,3,4]
print(1 in a)
print(10 in a)
print(1 not in a)
print(10 not in a)

#运行结果:
# True
# False
# False
# True

#2. 使用 index 方法, 来判断,当元素在列表中的位置, 得到一个 下标
a=[1,2,3,4]
print(a.index(2))
print(a.index(3))
print(a.index(10))

#运行结果:
# 1
# 2
# ValueError: 10 is not in list
#1. 使用 pop 删除列表中最末尾的元素.
a = [1,2,3,4]
a.pop()
print(a)
#运行结果:
# [1, 2, 3]

#2. 使用 pop 还能删除任意位置的元素, pop 的参数可以传一个下标过去
a = [1,2,3,4]
a.pop(1)
print(a)
#运行结果:
# [1, 3, 4]

#3. 使用 remove 方法, 可以按照值来进行删除.
a = ["aa","bb","cc","dd"]
a.remove("cc")
print(a)
#运行结果:
# ['aa', 'bb', 'dd']

2.7列表的拼接

# 1. 使用 + 针对两个列表进行拼接.
a = [1,2,3,4]
b = [5,6,7,8]
c = b + a
print(c)
print(a)
print(b)

#运行结果:
# [5, 6, 7, 8, 1, 2, 3, 4]
# [1, 2, 3, 4]
# [5, 6, 7, 8]

使用 + 拼接列表的时候,只是针对当前列表的内容生成了一个更大的新的列表

原有的列表内容是不变的!

#2. 使用 extend 来进行拼接.
#   这个拼接是❗直接❗把最后一个列表里的内容拼接到前一个列表里头~
a = [1,2,3,4]
b = [5,6,7,8]
a.extend(b)
print(a)
print(b)
#运行结果:
# [1, 2, 3, 4, 5, 6, 7, 8]
# [5, 6, 7, 8]

# 3. 使用 += 来进行拼接
a = [1,2,3,4]
b = [5,6,7,8]
a += b
print(a)
print(b)
#运行结果:
# [1, 2, 3, 4, 5, 6, 7, 8]
# [5, 6, 7, 8]

a += b 等价于 a = a + b      运行过程如下👇


a.extend(b) 则是直接把 b 的内容拼到了 a 的后面~

它们两个的过程是不一样的

a += b 等价于 a = a + b

多了三部操作:

1.多了构造新的大列表的操作

2.多了把大列表的值赋值给a的操作

3.多了把a的旧值释放的操作'

元组的操作

#1.创建元组
a = ()
print(type(a))
b = tuple()
print(type(b))
#2.创建元组时,指定初始值.
a = (1,2,3,4)
print(a)
# 运行结果:
# (1, 2, 3, 4)
#3. 元组中的元素也可以是任意类型的.
a = (1,2,"hello",True,[])
print(a)

# 运行结果:
# (1, 2, 'hello', True, [])



#4. 通过下标来访问元组中的元素,下标也是从 0 开始,到 len - 1结束.
a = (1,2,3,4)
print(a[1])
print(a[-1])
print(a[100])

# 运行结果:
# 2
# 4
# tuple index out of range
#5. 通过切片来获取元组中的一个部分
a = (1,2,3,4)
print(a[1:3])

#6. 也同样可以使用 for 循环等方式来进行遍历元素
a = (1,2,3,4)
for elem in a:
    print(elem)

# 运行结果:
# (2, 3)
# 
# 1
# 2
# 3
# 4
# 7. 可以使用 in 来判定元素是否存在, 使用 index 查找元素的下标.
a =(1,2,3,4)
print(3 in a)
print(a.index(3))

# 8. 可以使用 + 来拼接两个元组
a = (1,2,3)
b = (4,5,6)
print(a + b)


做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。



别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。

* * *



**(1)Python所有方向的学习路线(新版)**

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。



最近我才对这些路线做了一下新的更新,知识体系更全面了。



![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7846c5b6becf44a9a319076f80f32503~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802500&x-signature=Mg%2BiG1P0A9cPCOnYSdQoLdWRNYY%3D)



**(2)Python学习视频**



包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。



![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/82b2048cce6d414bb930a4a70fdaaf0c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802500&x-signature=ZjJcJpMmHqCVcOlzL6PGBSCLNiY%3D)



**(3)100多个练手项目**

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。



![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/1a49b970a41a494e9b18123473383536~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802500&x-signature=j1dAbffze9pKO3PWvvRSZBUvIQc%3D)



**(4)200多本电子书**  

  

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。



基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。



**(5)Python知识点汇总**

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。



![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2de33f945a64457a86b9518e52826c14~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802500&x-signature=boN5FZgZHxJ2VU6toSvvsN8u6TQ%3D)



**(6)其他资料**



还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。



![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4385938df61e44a4832ad0070097a2f4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802500&x-signature=WKOvhFwWnXecnB0ZJTXz3UOZN3A%3D)

**这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。**



**了解详情:https://docs.qq.com/doc/DSnl3ZGlhT1RDaVhV**