列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
#先定义一个列表letters = ['a', 'b', 'c', 'd', 'e']letters[1]#输出:b#列表的索引是从0开始letters[-1]#输出:e#也可以倒着取,-1既倒数第一个元素
letters = ['a', 'b', 'c', 'd', 'e']#从下标1开始,取到下标3之前,不包括下标3letters[1:3]#输出结果:['b', 'c']#取下标2到-1,-1既倒数第一个,这里不包括-1letters[2:-1]#输出结果:['c', 'd']letters[0:-1]#如果从0开始取,0可以不输入,下面这个和上面一样的效果letters[:-1]#输出结果都是:['a', 'b', 'c', 'd']#取到结尾,如果想取到最后一个不能用-1,直接忽略既可letters[1:]#输出结果:['b', 'c', 'd', 'e']#如果在后面加一个2,就是在原有的条件下,每隔一个元素获取一个letters[1::2]#输出结果:['b', 'd']
letters = ['a', 'b', 'c', 'd', 'e']letters.append('f')print(letters)#输出结果:['a', 'b', 'c', 'd', 'e', 'f']#就是在列表结尾添加一个新元素
letters = ['a', 'b', 'c', 'd', 'e']letters.insert(3, 'F')print(letters)#输出结果:['a', 'b', 'c', 'F', 'd', 'e']#在下标3的位置插入一个元素
letters = ['a', 'b', 'c', 'd', 'e']letters[0] = 'A'print(letters)#输出结果:['A', 'b', 'c', 'd', 'e']#修改指定下标的元素
letters = ['a', 'b', 'c', 'd', 'e']#del删除索引元素del letters[0]#输出结果:['b', 'c', 'd', 'e']#remove删除指定元素letters.remove('b')#输出结果:['a', 'c', 'd', 'e']#pop删除列表中最后一个值letters.pop()#输出结果:['a', 'b', 'c', 'd']
letters = ['a', 'b', 'c', 'd', 'e']letters2 = [1, 2, 3, 4]letters.extend(letters2)#输出结果:['a', 'b', 'c', 'd', 'e', 1, 2, 3, 4]#既把列表letters2的元素都添加到letters中
letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]letters_copy = letters.copy()print(letters_copy)#输出结果:['a', 'b', 'c', 'd', 'e', ['f', 'g']]
看上面的方法好像确实copy成功了。但是还没完,我们在来试试修改copy之后的列表
letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]letters_copy = letters.copy()letters_copy[5][1] = 'h'print(letters)print(letters_copy)#输出结果:#['a', 'b', 'c', 'd', 'e', ['f', 'h']]#['a', 'b', 'c', 'd', 'e', ['f', 'h']]
我们上面吧 letters_copy 的第5个元素中的 ‘g’改成‘h’,结果打印结果发现,letters也跟着改变了。
其实此处copy是浅copy,只copy列表的第一层,第二层没有copy,而是指向相同地址
第二个列表中的元素只是第一个列表中每一个元素的一个引用
那么重点来了,我们想要完全copy一个列表的时候怎么办?当然有办法
引用一个copy模块,调用copy模块中的deepcopy方法,既可实现深copy
import copyletters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]letters_copy = copy.deepcopy(letters)letters_copy[5][1] = 'h'print(letters)print(letters_copy)#输出结果:#['a', 'b', 'c', 'd', 'e', ['f', 'g']]#['a', 'b', 'c', 'd', 'e', ['f', 'h']]
这样就可以完全copy了。
letters = ['a', 'b', 'c', 'd', 'e', 'b']print(letters.count('b'))#输出结果:2#统计指定元素在列表中的数量
letters = ['a', '#b', '1f', 'c', 'e', 'd', '承受']letters.sort()print(letters)#输出结果:['#b', '1f', 'a', 'c', 'd', 'e', '承受']#将列表安装顺序从新排序#排序的顺序是,特殊符号-->数字-->字母-->汉字#这里要注意,在Python 3中,不同数据类型是不能排序的,否则会报错letters = ['a', 'b', 'f', 'c', 'e', 'd', 1, 2]letters.sort()#像上面这样的列表排序就会报错#TypeError: unorderable types: int() < str()
letters = ['a', 'b', 'c', 'd', 'e']letters.reverse()print(letters)#输出结果:['e', 'd', 'c', 'b', 'a']#将列表倒序
letters = ['a', 'b', 'c', 'd', 'e']print(letters.index('b'))#输出结果:1#获取指定元素的下标位置
字典是一种key - value 的数据类型,使用就像我们用的字典,通过笔划、字母来查对应页的详细内容,一个键对应一个值。
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}
这里要说下字典有哪些特性:
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}info['name06'] = '黄汉升'print(info)#输出结果:{'name05': '马孟起', 'name01': '刘玄德', 'name03': '张翼德', 'name06': '黄汉升', 'name04': '赵子龙', 'name02': '关云长'}
#直接给一个不存在的键赋值就可以添加一个字典元素了
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}info['name05'] = '黄汉升'print(info)#输出结果:{'name04': '赵子龙', 'name02': '关云长', 'name01': '刘玄德', 'name03': '张翼德', 'name05': '黄汉升'}#方法和添加一样,只要键值存在,则直接覆盖
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}#删除方法有多种#1.用pop删除,用到最多且最好的一种info.pop('name01')#2.del 内置的删除函数,和第一种效果一样del info['name02']#3.popitem,这个是在字典中随机删除一个元素info.popitem()print(info)#输出结果:{'name03': '张翼德', 'name05': '马孟起'}
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}#in判断key是否存在print('name01' in info)#输出结果:True#get获取key的值print(info.get('name02'))#输出结果:关云长#同上获取key的值print(info['name02'])#输出结果:关云长#这里要注意,用这种方法取值,如果key不存在程序会报错print(info['name12'])#报错KeyError: 'name102'#如果使用get则不会报错,会返回None
heros = { '魏国':{ '曹操':['枭雄','对酒当歌人生几何'], '司马懿':['谋略滔天'] }, '蜀国':{ '刘备':['哭'], '关羽':['义薄云天'] }, '吴国':{ '孙权':['年少有为'], '周瑜':['既生瑜何生亮'] }}heros['魏国']['曹操'][0] += ',宁可我负天下人'print(heros['魏国']['曹操'])#输出结果:['枭雄,宁可我负天下人', '对酒当歌人生几何']#直接在元素中追加了内容
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}#取所有键print(info.keys())#输出结果:dict_keys(['name04', 'name01', 'name03', 'name02', 'name05'])#取所有值print(info.values())#输出结果:dict_values(['赵子龙', '刘玄德', '张翼德', '关云长', '马孟起'])
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}#字典中不存在key则添加元素,否则返回对应key的值print(info.setdefault('name01','曹孟德'))#输出结果:刘玄德print(info.setdefault('name06','曹孟德'))#输出结果:曹孟德
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}info2 = { 'name01':'曹孟德', 'name10':'曹子孝'}#对已有键值就更新,没有的键值则添加info.update(info2) print(info)#输出结果:{'name04': '赵子龙', 'name05': '马孟起', 'name03': '张翼德', 'name01': '曹孟德', 'name10': '曹子孝', 'name02': '关云长'}
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}print(info.items())#输出结果:dict_items([('name01', '刘玄德'), ('name02', '关云长'), ('name04', '赵子龙'), ('name03', '张翼德'), ('name05', '马孟起')])#字典转成元组
info = { 'name01': '刘玄德', 'name02': '关云长', 'name03': '张翼德', 'name04': '赵子龙', 'name05': '马孟起'}#方法一: 这个是最基本的循环,也是最建议使用的for key in info: print(key,info[key])#方法二:这个循环会把字典先转成列表,然后循环,性能和第一种方法差很多,如果数据量大区最好别用for k,v in info.items(): print(k,v)#输出结果:#name01 刘玄德#name04 赵子龙#name03 张翼德#name05 马孟起#name02 关云长
元组其实跟列表差不多,也是存一组数,只是它一旦创建,便不能再修改,所以又叫只读列表
heros =('曹操','刘备','孙权')
它只有2个方法,一个是count,一个是index
联系客服