python - 第四天
元组:
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]。
注:元组中只包含一个元素时,也需要在元素后面添加逗号 ,否则括号会被当作运算符使用:
eg:
tup1=(1,2,3,4,5);
tup2=(1);
tup3=(1,);
print(type(tup1));
print(type(tup2));
print(type(tup3));
运行结果如下:
访问元组
元组内的元素的访问和字符串,列表是一样的,下标索引从零开始,使用下标索引来访问元组中的值。
修改元组:连接,删除
元组中的元素值是不允许修改的,也不允许删除,但我们可以对元组进行连接组合,或者使用del来删除整个元组。
eg:
tup1=(1,2,3,4,5);
tup2=("hello","world","hh");
tup3=tup1+tup2;#拼接
print(tup3);
print(type(tup3));
del tup1;
print(tup1);#这里会报错。因为元组是不可变的,不能删除元素。
运行结果:
元组运算符
与字符串一样,元组之间可以使用 +、+=和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
关于元组是不可变的。
所谓元组的不可变指的是元组所指向的内存中的内容不可变。
eg:
tup1=("h","e","l","l","o");
tup1[0]="g";#这里会报错,因为元组是不可变的,不能修改元素。
print(tup1);
运行结果:
eg:
tup1=(1,2,3,4,[5,6,7]);
tup1[-1][0]=8;#这里不会报错,因为元组所指向的对象(应该是列表的地址)没有改变,改变的是列表内的对象。
#应该是元组所存储的列表的地址没有改变,然后仍是通过这个地址找到该列表,从而对列表内存储的元素地址,去找到该元素进行修改。
print(tup1);
运行结果:
我简单查了一下元组存在的意义,一来,它不可以修改,所以更加安全,可以防止意外改动;二来,它相对于列表,结构更加简单,所以可以更快的创建和访问,而且存储空间更小。
字典:
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对,用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中。(列表是中括号[ ],元组是小括号( ) )
形式如下:
d = {key1 : value1, key2 : value2, key3 : value3 }
注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict。
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字,还有个是元组。
创建字典
eg:
dict1={"name":"ghh","age":99,"gender":"male"};#这种形式
print(dict1);
print(type(dict1));
运行结果:
使用大括号 { } 创建空字典:
eg:
dict1={};
print(dict1);
print(f"length:{len(dict1)}");#这里复习一下格式化字符串的用法,f-string,len()是个函数,用来查阅括号内序列的长度
print(type(dict1));
运行结果:
使用内建函数 dict() 创建字典:形式如下:
my_dict = dict(key1='value1', key2='value2')
#也可以是双引号
eg:
dict1=dict(name="guo",age=18,gender="male");#这里用dict()函数创建,注意内部和用大括号不一样
print(dict1);
print(type(dict1));
运行结果:
访问字典里的值
和访问字符串,列表,元组差不多,把方括号里面的索引值变成了键,把相应的键放入到方括号中,但注意要带引号。
eg:
dict1=dict(name="guo",age=18,gender="male");
print(dict1["name"]);#访问
print(f"name:{dict1["name"]},age:{dict1["age"]}","gender:%s"%dict1["gender"]);#再复习一下原始的%s
运行结果如下:
修改字典:修改,添加,删除
修改和添加形式是一样的,又就修改,无就添加;
能删单一的元素也能清空字典,清空只需一项操作。显式删除一个字典用del命令。可以用tinydict.clear() 这个函数清空字典,tinydict是字典名(清空并没有删除字典,只是字典内元素为空)。
eg:
dict1=dict(name="guo",age=18,gender="male");
print(id(dict1["name"]));dict1["name"]="ghh";#修改:
print(dict1);
print(id(dict1["name"]));dict1["city"]="ooo";#添加,加在字典尾部
print(dict1);del dict1["age"];#删除
print(dict1);dict1.clear();#清空整个字典
print(dict1);del dict1;#删除整个字典
运行结果如下:
修改也改变了地址。
字典键的特性
字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。
eg:
dict1={"name":"guo","age":99,"name":"ghh"};#这里用了两个name,后面的会覆盖前面的,所以最后的name是"ghh"
print(dict1["name"]);
运行结果: