bs4.beautiful soup 爬虫报错none type_P10-11《Python爬虫技术5天速成…》学习过程笔记8(超详细记录)...

本文介绍了Python中的元组、字典和集合数据结构,强调了元组在定义时需要注意的细节,如单元素元组需加逗号。还概述了字典的特性,如键的唯一性和通过键访问值的方法。同时,简要提及了集合的自动去重功能。
摘要由CSDN通过智能技术生成
5e09e8348f133f6c114f2850d22cd2d8.png

对应原视频 第10集 元组 字典(上)第11集 字典(下)_集合 & 数据结构小结

9be7b07f0575565d15d4dec37c072361.png

本篇概要:

(这两集的学习没遇到什么困难,都是知识点的学习了解,花时间多看视频就好,下面的内容基本只是概要。)

P10

--元组里只有一个元素时一定要在元素后面加一个英文逗号

P11

--数据结构小结

aed994262a70ba764be75e547a05a2cf.png

--元组里只有一个元素时一定要在元素后面加一个英文逗号

P10

元组 Tuple

第二点,比如tuple里边含有一个list,那么list列表里的元素是可以改变的。而包含在里边的这个list本身,它的地址即下标是不可以改变的。

我们在定义这个tuple的时候,必须用一个逗号来分隔,否则你直接把它放在一个小括号里,它并不是一个元祖,它变成你自己这个小括号里边本身这个元素的一个类型了。

怎么证明这么样的一点呢?来看程序。

新建一个文件。

36bff3b05ac67636821284612e258c74.png

结果:

ca6359e55e038cae181ce702372c750b.png

也就是说,上面的tup1确定是一个空的元组。但是往里面放了一个数据,它就不是元组了,它是一个整型。

为什么呢?是因为用括号的话,它会直接把它解释为表达式的一部分,也就是正常数学运算时候的这样一个小括号。

那怎么把它变成为一个元组呢?只有一个元素的时候,在元素后面加一个英文逗号,就可以区分开来它不是一个普通的数值,它是一个只有一个元素的元组。

当元素有多个的时候,最后一个元素后面就不需要加个逗号来区分,因为它不可能是数学运算的一个式子,它会自动默认为元组,不用特意去区分。

当然我闲的,我去试了多个元素也加逗号,都可以,加不加结果是一样的,没影响。

tup3 = (50,)                  # <class 'tuple'>  元组只有一个元素时需要加逗号,

tup4 = (50, 2, 30, 42)      # 多个元素时,后面就不用加逗号tup5 = (50, 2, 30, 42,)     # 当然就要加就加吧,试了也可以,结果一样。

print(tup3, type(tup3))
print(tup4, type(tup4))
print(tup5, type(tup5))

结果:

(50,) <class 'tuple'>

(50, 2, 30, 42) <class 'tuple'>

(50, 2, 30, 42) <class 'tuple'>

--元组的使用:按照增删改查的思路

--访问元组,可以采用下标的方式。和列表很像

元组里也可以放不同的类型的数据。也可以像列表一样,用 -1的下标访问最后一个。

可以进行切片,步进。范围是:左闭右开

# 改

说这个元组对象是不支持我们每个选项的这样一个赋值的。元组不可以进行选项赋值这样的增加,即修改。

# 增 (连接)

把这个元组和另外一个元组做一个连接,这样形成了一个新的联合体。

为什么说这不是一个相加的结果?这个其实是在内存里边,它给我们分配了一个新的空间,将前边两个内容全部赋值到新的空间里边,并且连接了起来,是这样的过程。所以说,这个表面上看起来是一个增加的过程,其实是创建了一个新的元组。

所以这个新增,它有一个概念上的区分,并不是在我们某一个上边增加了,而是直接新建了,可以把这个新增理解为连接,是这样的一个概念。弹幕的话也挺好:元组指向的那片空间改变了。1:29

20201106

14:30

# 删

这里的删除是直接删除了我们整个元组变量,就没有这么个元组了。它并不是说把里面的元素给你清空了,它是把你这整个变量给你从内存里清空了。所以说这里的删除删得比较彻底,是删除了整个元组变量。

这个删除是可以的。它不允许你删除元组里面的某一个值,但是你可以删除整个元组。

# 查

其实就是元组的访问,通过下标来。

元组不是需要大家去重点掌握的,所以就简单介绍一下。

字典 dict

字典储存的是键值对这种形式。一般有些编程语言管它叫map,那么你知道它是键值对就行了。

里边很多都是键值对这样的存储格式,它就是为了保证我们想要差一个键的时候,快速找到值,这么的一个功能而设计的。在python里管它叫字典。

在我们字典里边,前面这个键它必须是唯一的,它后边的值是可以重复的,因为这相同的值属于不同的键。

我们主要掌握的是,字典是键值对这么样的存储形式,每一个键都是唯一的,这就可以了。

字典的定义,它用的是大括号,也有人说是花括号{ }。每一个键值对之间是用冒号相分隔的,一个键值对一个键值对是用英文逗号分开的。

# 字典的定义
info = {"name": "吴彦祖", "age": 18}

如何访问字典里的值?

用print,它里面用的是下标吗?注意:它用的是一个中括号[ ],里边加上键的名字。

比如说我们用name这个键来找到里面对应的值:

# 字典的访问
print(info["name"])
print(info["age"])

结果:

吴彦祖

18

通过键找值。

但访问的时候有一个问题,如果我们访问了一个不存在的键怎么办?

使用get方法,没有找到对应的键,默认返回:None。也可以自定义返回的默认值。不会报错,下面还有代码程序可以继续执行。

这是在访问字典的时候常用的一种方式。访问一个不存在的键的时候,经常使用。

P11

字典(下)

字典,也是一个数据结构,我们还是用增删改查这样思路来了解它。所有的数据结构都可以用这个思路去贯穿学习。

# 增

给字典赋予新元素:新增一个键值对。

# 删: 【del】【clear】

【del】删除某个元素

它删除的不仅仅是我们这个值,它删的是整个键值对。

【del】删除整个字典

可以像元组一样,用get吗?

字典也可以用get访问,也可以设定默认返回值。

批量单行注释:选中后,按住ctrl + /,就会批量单行注释掉。

批量去除单行注释,也是按ctrl + /。

# 删: 【clear】清空

顾名思义,就是什么都没有了。它是对整个字典进行操作。

清空以后,就是这样一个空的字典。

# 改

修改,给某个键赋值。

# 查   (遍历)

查有些地方需要着重了解一下。一个是键的查询,一个是值的查询。

# 查: 【keys】得到所有的键

得到所有的键。(列表形式)。如果还想对得到的键进行操作,就可以用访问列表的形式来做。

# 查: 【values】得到所有的值

也是列表形式。

# 查: 【items】得到所有的项

比如 ”id”: 1,这就是一个项。

# 查:【keys】 【values】 【items】
info = {"id": 1, "name": "吴彦祖", "age": 18}
print(info . keys())                  # 得到所有的键。(列表形式)
print(info . values())                # 得到所有的值。(列表形式)
print(info . items())      # 得到所有的项。(列表形式,里面每每个键值对是一个元组。)

# 遍历所有的键

# 遍历所有的值

# 遍历所有的键值对

--额外补充:枚举类型:enumerate()

但是我们想要拿到这个列表的下标,老师说只能用while循环对不对。(不对,用for循环也可以啊,通过len()长度这个就可以做到。)那我们怎么可以用for循环,向上面一样既拿到key又拿到value,我们怎么可以用for循环既拿到元素又拿到下标呢?有一种方式,就是用枚举类型。(这里我要补充,之前学的for循环知识就可以既拿到下标又拿到元素,for循环里嵌套一个for循环呀。)

有没有启发呢?还记得前面留的作业吗?是不是让你打印你购物车里面的内容,最好是前边有下标的内容,对不对,你购物车里边的这个号码。如果你的那个号码是从1开始的,在这里用i + 1 就可以了。

(20201219这里我和老师的理念不一样,我认为编号是商品的一个标识码,就像是超市里商品上面也有条形码什么的,结账时用来扫描标识这件商品,从头到尾都是不变的。我的作业代码也做了这个说明。其实买东西那里也可以加上一个商品序号,以显示用户买了多少种商品,就可以用现在这个枚举类型。这个我没有加,你可以自行加上(^U^)ノ~YO。)

集合 set

集合不是我们现在的重点,所以简单介绍一下。

眼睛的晶状体变形比较严重了,一下子用太久,看不清晰了,走人。19:09

20:46

集合跟字典很类似,也是这种键的集合。但是注意,仅仅是键的集合,它没有value,它不存储值,而且键不能重复。你可以把它理解为就是把字典里的键单独拿出来形成了一种数据结构。

它的形成方式大家可以看到,就是一个set,你可以理解为它是一个强制类型转化一样的概念,里边就是一个列表。

s = set([1, 2, 3])

打印出来的结果:{1, 2, 3}

注意它打印出来就是一个大括号的形式。它的大括号的形式,表示的是它是一个集合。这种集合里边的每一种元素,它不是键值对,它仅仅是一个数值而已。这个数值里边所有的值,它都是不重复的。

如果大括号里面列表的值有重复的,它打印出来还是没有重复的,它自动去重了。

print(([1, 1, 2, 2, 3, 3]))

结果:{1, 2, 3}

所以集合可以当作自动去重这么一个操作。简单了解就可以。

--数据结构小结

列表[ ]:有序的,可以通过下标来访问,里边每一个元素的类型可以是数据也可以是字符串,可以修改。

元组( ):有序的,里面的类型不可以改,但也可以是数据或字符串。

字典{ }:无序的,它的顺序指的是键之间的顺序,没有顺序。键不可以改变,但是值可以通过查询来修改。

集合([ ]):无序的,但它是不重复的。可以理解为是键的集合。

整个这个过程里,大家在用的时候,注意了解它的使用场景。重点掌握列表和字典,这两个都会在后边进行爬虫啊还有网站编写的时候,非常经常地用到。其中再强调重点的话,就是列表,其次是字典,再往下是元组,最次是集合。所以前面的作业,大家可以花更多的时间在列表和字典的应用上,可以多加练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值