python学习笔记4
python学习笔记4
一、列表的常用操作
列表是python常用的容器型数据类型,它里面可以存储任意类型的数据。python中的列表是有序的,可以索引和切片。
-
索引
li = ['a',1,['b',2],'name'] li[0] # a li[2] # ['b',2] li[-1] # name # python中索引都是从0开始 -
切片
li = ['a',1,['b',2],'name'] li[1:] # [1,['b',2],'name'] li[3:] # ['name'] # 列表切片返回的仍然是一个列表 li[4:] # [] -
列表的创建方式
# 1、直接向[]中放入元素 li = ['a',1,['b',2],'name'] # 2、使用list函数将iterable转化为列表 l1_1 = list(iterable) # list函数参数为可迭代对象 # 3、列表推导式 li_2 = [i for i in range(10)] print(li_2) # [0,1,2,3,4,5,6,7,8,9] -
列表增添元素
li = ['a',1,['b',2],'name'] # 1.append在列表末尾加入一个新元素 li.append('new') print(li) # ['a', 1, ['b', 2], 'name', 'new'] # 2.insert在列表指定位置插入一个新元素 li.insert(2,'666') print(li) # ['a', 1, '666', ['b', 2], 'name', 'new'] # 3.extend往列表末尾迭代增加 li.extend('abcd') print(li) # ['a', 1, '666', ['b', 2], 'name', 'new', 'a', 'b', 'c', 'd'] li.extend(['believe','trust']) print(li) # ['a', 1, '666', ['b', 2], 'name', 'new', 'a', 'b', 'c', 'd', 'believe', 'trust'] -
列表删除元素
li = ['a',1,['b',2],'name','b','c','d','name'] # 1.pop按照索引删除,返回被删除的元素(默认删除最后一个元素) print(li.pop(2)) # ['b',2] print(li) # ['a', 1, 'name', 'b', 'c', 'd', 'name'] # 2.remove删除指定元素,默认删除从左数第一个 li.remove('name') print(li) # ['a', 1, 'b', 'c', 'd', 'name'] # 3.clear清空列表元素,保留空列表 li.clear() print(li) # [] # 4.del删除选定部分 li_1 = ['a','b','c','d','e','f'] # 每两个元素删除一个 del li_1[::2] print(li_1) # ['b', 'd', 'f'] -
列表修改元素
li = ['a','b','c','d','e','f'] # 1.指定位置赋值修改 li[0] = '666' print(li) # ['666', 'b', 'c', 'd', 'e', 'f'] # 2.切片迭代修改 li[2:4] = '12345678' print(li) # ['666', 'b', '1', '2', '3', '4', '5', '6', '7', '8', 'e', 'f'] # 3.按固定步长切片修改 li = ['a','b','c','d','e','f'] li[::2] = '234' print(li) # ['2', 'b', '3', 'd', '4', 'f'] # 如果取出来的值跟修改值个数不相等时程序会报错 li[::2] = '6789' print(li) # 程序会报错 # ValueError: attempt to assign sequence of size 4 to extended slice of size 3 -
列表查找元素
# 利用for循环查找每个元素 li = ['a','b','c','d','e','f'] for alph in li: print(alph) ''' a b c d e f '''
二、数据类型的分类
- 可变(不可哈希)的数据类型:list, dict, set
- 不可变(可哈希)的数据类型:str, bool, int, float, tuple
可哈希与不可哈希:
-
python中对于可哈希的对象是这样描述的:An object is hashable if it has a hash value which never changes during its lifetime (it needs a hash() method), and can be compared to other objects (it needs an __ eq__() or cmp(). Hashable objects which compare equal must have the same hash value.
-
对于 Python 的内建类型来说,只要是创建之后无法修改的(immutable)类型都是 hashable 如字符串,可变动的都是 unhashable的比如:列表、字典、集合,他们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法哈希。我们自定义的类的实例对象默认也是可哈希的(hashable),而hash值也就是它们的id()。
三、字典的常用操作
-
在列表存储的大量数据中,数据之间的关联性并不强,并且列表的查询速度比较慢,当列表中存取大量数据时,查询时非常费劲。
-
字典的基本形式
# 创建一个简单的字典 dict_1 = {'name':'Alice','age':18,'sex':'male'} # dict_1就是一个字典 # 'name':'Alice'是这个字典中一个基本的元素,它是键值对的形式 -
字典中键必须是不可变的数据类型,即可哈希的类型(一般为int或者str),而且是唯一的。
-
值可以是任意数据类型,对象。
-
字典占据内存大,但是查询速度特别快,相当于用存储空间换取了查询的时间。
-
字典的其他创建方式
# 1.利用元组的拆包 dict_1 = dict((('a',1),('b',2),('c',3))) print(dict_1) # {'a': 1, 'b': 2, 'c': 3} # 2. dict_2 = dict(a=1, b=2, c=3) print(dict_2) # {'a': 1, 'b': 2, 'c': 3} # 3. dict_3 = dict({'a': 1, 'b': 2, 'c': 3}) print(dict_3) # {'a': 1, 'b': 2, 'c': 3} -
字典增加元素
dict_1 = {'name':'Alice','age':18} # 1.利用键增加一个新元素,由于键是唯一的,所以键不能与已有的键相同 dict_1['sex'] = 'male' print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male'} # 如果字典中已有输入的键,则会修改键对应的值 # 2.利用setdefault()方法,没有输入值时默认是None dict_1.setdefault('hobby') print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male', 'hobby': None} # 也可以输入值使其称为键对应的值 dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'} dict_1.setdefault('hobby','玩游戏') print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male', 'hobby': '玩游戏'} # 如果字典中已有输入的键,不会修改键对应的值 -
字典删除元素
dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'} # 用pop按字典的键删除 print(dict_1.pop('age')) # 18 返回的是删除的键所对应的值 print(dict_1) # {'name': 'Alice', 'sex': 'male'}删除了选定的键值对 # 当用pop来删除原字典中没有的键时: print(dict_1.pop('hobby')) # KeyError: 'hobby' 程序报错 print(dict_1.pop('hobby','没有这个键')) # 没有这个键 # 如果没有该键,返回的是设置的值 # clear,清空字典 dict_1.clear() print(dict_1) # {} # del删除指定键 dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'} del dict_1['age'] print(dict_1) # {'name': 'Alice', 'sex': 'male'} # 此时dict_1中没有age,在执行del dict_1['age']会报错 del dict_1['age'] # KeyError: 'age' -
字典修改元素
# 直接利用已有键进行索引修改 dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'} dict_1['age'] = 25 print(dict_1) # {'name': 'Alice', 'age': 25, 'sex': 'male'} # update方法 dict_1 = {'name': 'Alice', 'age': 18} dict_1.update(sex = 'male') print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male'} dict_1 = {'name': 'Alice', 'age': 18} dict_1.update([('sex','male'),('hobby','玩游戏')]) print(dict_1) # {'name': 'Alice', 'age': 18, 'sex': 'male', 'hobby': '玩游戏'} dict_1 = {'name': 'Alice', 'age': 18} dict_2 = {'name':'Believe','age':20,'hobby':'玩游戏'} dict_1.update(dict_2) print(dict_1) # {'name': 'Believe', 'age': 20, 'hobby': '玩游戏'} -
字典查询元素
# 直接根据键进行索引查询,如果键不存在则报错 dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'} print(dict_1['age']) # 18 print(dict_1['hobby']) # KeyError: 'hobby' # get方法 print(dict_1.get('age')) # 18 print(dict_1.get('hobby')) # None print(dict_1.get('hobby','没有此键')) # 没有此键 -
keys()、value()、items()
dict_1 = {'name': 'Alice', 'age': 18, 'sex': 'male'} print(dict_1.keys()) # dict_keys(['name', 'age', 'sex']) print(dict_1.values()) # dict_values(['Alice', 18, 'male']) print(dict_1.items()) # dict_items([('name', 'Alice'), ('age', 18), ('sex', 'male')]) # 可以结合元组的拆包和字典的items方法使用 for key,value in dict_1.items(): print(key,value) ''' name Alice age 18 sex male ''' -
字典是可以嵌套的。

浙公网安备 33010602011771号