前言:
本文章供python初学者自学学习,以后的话应该会每周末更新一次,因为本人也是在自学python,所以想借此来分享一波笔记。喜欢的话可以关注一下。
正文:
接上期,我们这章说元组和字典。他们三个(列表、元组、字典)都很类似,可以类比去记忆。
一、元组:
它与列表类似,只不过所有元素都是放在小括号里,相邻元素之间用 “,” 分开。元组的内容也可以是任何数据类型。它与列表最主要的区别就是:元组是不可改变的序列,列表是可以改变的序列。
1.元组的创建和删除
格式:
tuplename = (element1,element2,element3)
参数 | 含义 |
tuplename | 元组的名称,符合命名规范就可以 |
element1 | 元组中的元素,个数没有限制,类型不限 |
和创建列表类似,只不过把 [ ] 换成(),事是上,我们小括号也是可以省略的,只需要将一组值用逗号分开,它就是元组。
例如:
str1="好好学习","天天向上"
print(str1) #输出('好好学习','天天向上')
不过有一点要注意的是:
当元组中只有一个元素时,我们需要在元素后面加 “,” 如果不加 ","则该变量类型为字符串类型。
先介绍个函数在举下面的例子
type()可以测试变量类型,括号里直接放入要测变量的名称。
varse1 = ("加油!",)
varse2 = ("加油!")
print("varse1的类型为:",type(varse1))
print("varse2的类型为:",type(varse2))
运行结果如下:
这就是加逗号和不加逗号的区别,区别还是很大的。所以呢,一定要加逗号!!!
2.创建空元组
emptytuple = ()
创建一个名称为 emptytuple 的空元组
3.创建数值元组
这就和列表一样了,用tuple()函数
格式:
tuple(data)
data表示可以转换成元组的数据,其类型可以是range()对象、字符串、元组(可以嵌套)
num=tuple(range(10,20,2))
print(num) #输出(10, 12, 14, 16, 18)
4.删除元组
格式:
del name #name为要删除元组的名称
不过python自带垃圾回收机制,所以不需要我们自己删除。
5.访问元组元素
直接用索引来访问
格式:
print(untitle[0])
untitle:表示访问元组的名称。
代码如下:
name = ("张子枫","何炅","黄磊","王源","王俊凯")
print(name[0])
运行结果如下:
当然对于元组也可以采用切片的方式获取指定的元素
例如:
name = ("张子枫","何炅","黄磊","王源","王俊凯")
print(name[:3])
运行结果如下:
从上面两个列子可以看到,当访问元组中单个元素时,输出不包括小括号,如果是字符串的话,输出不带引号,但访问多个元素时,输出不仅带小括号,而且还带单引号。
6.修改元组元素
在文章开头我们说元组不可以修改,那我们现在又要说修改元组元素,好像我是有什么大病似的。但是,我们可以对元组重新赋值。就类似修改元组。举个小例子。
name = ("张子枫","何炅","黄磊","王源","王俊凯")
print(name[:3])
name = (95,69,88,49,83,98,45,68,5,6,46)
print(name[:3])
运行结果如下:
另外,我们可以对元组进行连接组合,我们用 “+” 来进行连接
name = ("张子枫","何炅","黄磊","王源","王俊凯")
print(name)
name = name+(35,65,65,66,98,76,53)
print(name)
运行结果如下:
需要注意的是:元组只能连接元组,不能将字符串、列表等与元组连接在一起。另外呢,当连接的元组只有一个元素时,一定不要忘记在后面加逗号。
7.元组推导式
元组推导式和列表的一样,只不过是把 [ ] 改成 ( ) ,但是还是稍微有一点区别的。
使用元组推导式生成的结果并不是一个元组,而是一个生成器对象,我们要将其转换成元组
转换成元组的函数:tuple()
转换成列表的函数:list()
number = (i for i in range(3))
print(number)
number = tuple(number)
print(number)
运行结果如下:
输出的第一个就是生成器对象,第二个就是生成器对象转换成的元组。
另外,还可以通过for循环来输出
number = (i for i in range(3))
for i in number:
print(i,end=" ")
print(number)
number = tuple(number)
print(number)
运行结果如下:
仔细看运行结果,最后一个只输出了一个(),因为for循环遍历后原生成器对象已经不存在了,如果还想在使用生成器对象,都必须在创建一个生成器对象。
二、字典
字典和列表也是类似,但它是无序的可变序列,保存的内容是以 ”键——值对“的形式存放的,就相当于新华字典里面拼音和汉字之间的关系,拼音相当于键,汉字相当于值。
字典特征如下:
1.通过键而不是通过索引来读取
2.字典是任意对象的无序集合
3.字典是可变的,并且可以任意嵌套
4.字典中的键必须唯一
5.字典中的键必须是不可变,可以是元组。
1.字典的创建和删除
形式上,用一个 { } 里面包括键和值分别用 ‘ ’ 括起来,键和值之间用” :“分隔开。
格式:
dictionary = {'key':'value1','key':'value1'}
参数 | 含义 |
dictionary | 字典名称 |
key | 键 |
value1 | 值 |
(1)创建空字典
dictionary = {}
dictionary = dict()
用 dict()的方法不仅可以创建一个空字典,还可以通过已有数据快速创建字典
(2)通过映射函数创建字典
格式:
dictionary = dict(zip(list1,list2))
参数 | 含义 |
dictionary | 字典名称 |
zip() | 将多个列表或者元组对应位置组合为元组,并返回这些内容的zip对象。如果想得到元组,可以将zip对象使用 tuple()函数转换成元组如果想得到列表,则可使用 list()函数转换成列表 |
list1 | 用于指定要生成字典的键 |
list2 | 用于指定要生成字典的值,如果 list1和 list2 长度不一,则与最短的列表长度相同 |
代码如下:
name = ["张子枫","王源","王俊凯"]
sign = ["处女座","天蝎座","处女座"]
dictionary = dict(zip(name,sign))
print(dictionary)
运行结果如下:
(3)通过给定键——值对创建字典
dictionary = dict(key1=value1,key2=value2,key3=value3)
参数 | 含义 |
dictionary | 字典名称 |
key | 字典的键,必须是唯一的,并且不可变,可以是字符串,数字,或者元组 |
value | 字典的值 |
例如:
dictionary = dict(张子枫="处女座",王源="天蝎座",王俊凯="处女座")
print(dictionary)
运行结果如下:
关于这个键为什么不带双引号,(个人观点:因为键是不可改变的。我还没有找到可以说服我的原因,知道的大佬可以在评论区说一下)
还可以使用 dict 对象的 fromkeys()方法创建值为空的字典。
dictionary = dict.fromkeys(list1)
参数说明:
参数 | 含义 |
dictionary | 字典名称 |
list1 | 表示字典的键的列表 |
实例:
name = ["张子枫","王源","王俊凯"]
dictionary = dict.fromkeys(name)
print(dictionary)
运行结果如下:
另外如果想通过已有的列表和元组,创建字典,可以使用以下代码:
name = ("张子枫","王源","王俊凯")
sign = ["处女座","天蝎座","处女座"]
dictionary = {name:sign}
print(dictionary)
运行结果如下:
注意:
字典的键只能是元组。不然会报错。
(4)字典的删除
和列表元组一样,不需要的字典可以用 del 删除
del dictionary
当只想删除字典内的全部元素时,可以使用clear(),字典就会变成空字典。
dictionary.clear()
2.访问字典
(1)通过键访问元素
访问字典是通过键来访问元素的值,但是当你要访问的键不存在,系统就会报出异常。我们给出用条件表达式来解决。
dictionary = {"张子枫":"处女座","王源":"天蝎座","王俊凯":"处女座"}
print(dictionary["张子枫"] if '张子枫' in dictionary else "字典里没有此人")
print(dictionary["何炅"] if '何炅' in dictionary else "字典里没有此人")
运行结果如下:
(2)通过get()函数访问元素值
格式:
dictionary.get(key,[default])
参数说明:
参数 | 含义 |
dictionary | 字典名称 |
key | 键 |
default | 可选项,用于指定当键不存在时,返回一个默认值,如果省略则返回None |
示例:
dictionary = {"张子枫":"处女座","王源":"天蝎座","王俊凯":"处女座"}
print(dictionary.get("张子枫"))
print(dictionary.get("何炅"))
print(dictionary.get("何炅","字典内没有此人"))
运行结果如下:
3.遍历字典
格式:
dictionary = items()
返回值为为可遍历的键值对元组列表,需要通过for循环来遍历该元组列表,如下:
dictionary = {"张子枫":"处女座","王源":"天蝎座","王俊凯":"处女座"}
for item in dictionary.items():
print(item)
运行结果如下:
如果想要获取具体的每个键和值,可以在for循环中设置两个变量
dictionary = {"张子枫":"处女座","王源":"天蝎座","王俊凯":"处女座"}
for key,value in dictionary.items():
print(key,"的星座是",value)
运行结果如下:
4.添加、修改、删除字典元素
(1)添加、修改
dictionary[key] = value
参数说明:
参数 | 含义 |
dictionary | 字典名称 |
key | 要添加元素的键,必须是唯一的,并且不可变,可以是字符串、数字、元组 |
value | 要添加元素的值,可以是任意数据类型 |
如果新添加的键与已经存在的键重复,那么将使用新值来替换原来键的值,也就相当于修改操作。
代码如下:
dictionary = {"张子枫":"处女座","王源":"天蝎座","王俊凯":"处女座"}
dictionary["何炅"] = '金牛座'
print(dictionary)
dictionary["张子枫"] = '水瓶座'
print(dictionary)
运行结果如下:
(2)删除
删除和之前说删除整个字典一样,还是用 del ,但是当删除元素不存在时,系统就会抛出异常。
看代码:
dictionary = {"张子枫":"处女座","王源":"天蝎座","王俊凯":"处女座"}
if "王源" in dictionary:
del dictionary["王源"]
print(dictionary)
运行结果如下:
5.元组推导式
这一部分和列表的没有区别,表现形式和列表非常类似,可以参考《Python入门笔记(第五期——序列的应用1)》,要学会举一反三呢!
结合这两篇文章,你应该多少都对列表和、元组、字典都有了解吧!本节内容就到这里了,希望大家总结一下这三者的区别和联系,千万不要搞混掉。
最后喜欢的话关注一下吧!