Python学习,第五课 - 列表字典元组操作

Posted yidaoge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习,第五课 - 列表字典元组操作相关的知识,希望对你有一定的参考价值。

本篇主要详细讲解Python中常用的列表、字典、元组相关的操作

 一、列表

 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

 

通过下标获取元素

#先定义一个列表
letters = [a, b, c, d, e]

letters[1]
#输出:b
#列表的索引是从0开始

letters[-1]
#输出:e
#也可以倒着取,-1既倒数第一个元素

 

 

切片:获取列表中多个元素

letters = [a, b, c, d, e]

#从下标1开始,取到下标3之前,不包括下标3
letters[1:3]
#输出结果:[‘b‘, ‘c‘]

#取下标2到-1,-1既倒数第一个,这里不包括-1
letters[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‘]

 

 

追加 append

letters = [a, b, c, d, e]
letters.append(f)
print(letters)
#输出结果:[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘]
#就是在列表结尾添加一个新元素

 

 

插入 insert

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‘]

 

 

扩展 extend

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 copy

letters = [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了。

 

统计 count

letters = [a, b, c, d, e, b]
print(letters.count(b))
#输出结果:2
#统计指定元素在列表中的数量

 

 

排序 sort

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()

 

 

反转 reverse

letters = [a, b, c, d, e]
letters.reverse()
print(letters)
#输出结果:[‘e‘, ‘d‘, ‘c‘, ‘b‘, ‘a‘]
#将列表倒序

 

 

获取下标 index

letters = [a, b, c, d, e]
print(letters.index(b))
#输出结果:1
#获取指定元素的下标位置

 

 

 

二、字典

字典是一种key - value 的数据类型,使用就像我们用的字典,通过笔划、字母来查对应页的详细内容,一个键对应一个值。

语法如下:

info = {
    name01: 刘玄德,
    name02: 关云长,
    name03: 张翼德,
    name04: 赵子龙,
    name05: 马孟起
}

 

这里要说下字典有哪些特性:

  • 字典是无序的,所以字典中元素每次的位置都可能变化
  • 字典中key必须是唯一的,所以字典的键天生就去重了 

 

增加

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([‘赵子龙‘, ‘刘玄德‘, ‘张翼德‘, ‘关云长‘, ‘马孟起‘])

 

 

setdefault 函数

info = {
    name01: 刘玄德,
    name02: 关云长,
    name03: 张翼德,
    name04: 赵子龙,
    name05: 马孟起
}
#字典中不存在key则添加元素,否则返回对应key的值
print(info.setdefault(name01,曹孟德))
#输出结果:刘玄德

print(info.setdefault(name06,曹孟德))
#输出结果:曹孟德

 

 

update 函数

info = {
    name01: 刘玄德,
    name02: 关云长,
    name03: 张翼德,
    name04: 赵子龙,
    name05: 马孟起
}
info2 = {
    name01:曹孟德,
    name10:曹子孝
}
#对已有键值就更新,没有的键值则添加
info.update(info2) 
print(info)
#输出结果:{‘name04‘: ‘赵子龙‘, ‘name05‘: ‘马孟起‘, ‘name03‘: ‘张翼德‘, ‘name01‘: ‘曹孟德‘, ‘name10‘: ‘曹子孝‘, ‘name02‘: ‘关云长‘}

 

 

items

info = {
    name01: 刘玄德,
    name02: 关云长,
    name03: 张翼德,
    name04: 赵子龙,
    name05: 马孟起
}
print(info.items())
#输出结果:dict_items([(‘name01‘, ‘刘玄德‘), (‘name02‘, ‘关云长‘), (‘name04‘, ‘赵子龙‘), (‘name03‘, ‘张翼德‘), (‘name05‘, ‘马孟起‘)])
#字典转成元组

 

 

循环遍历字典dict

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

 

以上是关于Python学习,第五课 - 列表字典元组操作的主要内容,如果未能解决你的问题,请参考以下文章

python学习之路基础篇(第五篇)

python学习--day1(列表元组字典的区别)

python学习之元组列表字典操作

《Python基础教程》学习的第五课0121

python自学第五课!(列表)

Python面试必考重点之列表,元组和字典第五关——单星(*)和双星(**)运算符的作用并举例说明/合并列表和字典的方法有哪些