温馨提示:手机观看时,代码块可以左右滑动
本文内容
- 列表新建
索引
切片
序列的加法和乘法
成员资格
列表方法
- 元组
- 字典
字典常用方法
写在前面
- Python内置了多种序列,列表和元组是其中最常用的两种;
- 列表和元组的主要区别在于,列表可以修改,而元组不可以;
- 常规操作包括索引、切片、插入、删减等。
列表新建
- 新建一个列表;
- 列表由中括号为容器,每个元素之间用逗号间隔。
#新建一个列表:
alist = [1,"nihao","hello","你好"]
print(alist)
索引
- 列表中所有元素都有编号—从0开始递增;
- 列表中第一个元素编号为0,最后一个元素编号为-1。
alist = [1,"nihao","hello","你好"]
alist[0] #取出alist中的第一个元素1
alist[-1] #取出alist中的最后一个元素"你好"
alist[2] #取出alist中的第三个元素"hello"
切片
- 用索引我们可以访问单个元素,而切片可以让我们访问多个元素
- 使用两个索引值,并用冒号分隔
blist = [1,2,3,4,5,6,7,8,9,10] #新建一个列表blist
blist[0:3] #取出blist中前3个元素[1,2,3]
blist[7:10] #取出blist中后3个元素[8,9,10]
#添加步长参数
blist[0:4:2] #按步长为2,取出blist中前4个元素.[1,3]
#小应用:提取域名
wangzhi = input("请输入网址") #输入http://www.xiaokeai.com
yuming = wangzhi[11:-4] #截取域名
print(yuming) #返回 xiaokeai
序列的加法和乘法
[1,3,4]+[4,6,7] #运行结果为[1, 3, 4, 4, 6, 7]
[1,3,4]*4 #运行结果为[1, 3, 4, 1, 3, 4, 1, 3, 4, 1, 3, 4]
成员资格
- 用in判断元素是否在列表中,存在返回True,不存在返回False
#判断输入的内容是否存在
users = ["王二麻子","李大嘴","赵四","大墩子"] #简历列表users
user_name = input("请输入你的名字:") #输入
user_name in users
列表方法
- append 将一个对象附加到列表结尾
- insert 将一个对象插入到列表中的指定位置
- extend 将多个值添加进列表末尾
lst = [3,7,32,8,13,34] #创建新列表lst
lst.append(3) #添加新元素3
print(lst) #打印结果[3, 7, 32, 8, 13, 34, 3]
tst = [3,7,32,8,13,34] #创建新列表tst
tst.insert(3,"hello") #插入新元素,使得新元素的索引为3
print(tst) #打印结果[3, 7, 32, 'hello', 8, 13, 34]
ist = [3,7,32,8,13,34] #创建新列表ist
a = [1,3,4] #创建新列表a
ist.extend(a)
print(ist) #打印结果[3, 7, 32, 8, 13, 34, 1, 3, 4]
#extend添加与加法(ist+a)的主要区别是,extend改变了ist的内容,而加法没有改变ist
copy 复制列表
count 计算出指定的元素在列表中出现了多少次
index 查找指定值第一次出现的索引
a = [1,2,3] #创建新列表a
b = a.copy() #将a复制给b
print(b) #输出结果[1,2,3]
b[1] = 4 #改变b中的元素
print(a,b) #a不会被改变,输出[1, 2, 3] [1, 4, 3]
k = ["two","to","san","two",["two","two"]] #新建列表k
k.count("two") #统计k中"two"的个数,返回结果2
k.index("to") #返回to第一次出现的索引值,结果为1
- pop 从列表中删除末尾元素,并返回这一元素
- remove 用于删除第一个为指定值的元素
- clear 清空列表内容
- del 删除列表中元素(del语句不属于方法)
x = [1,2,3] #创建新列表x
x.pop() #删除了最后一个元素,并返回3
print(x) #输出结果[1,2]
y = [4,65,86,4,56,5] #创建新列表y
y.remove(4) #删除列表中第一个4
print(y) #输出结果[65, 86, 4, 56, 5]
j = [5,432,5425.6,51] #创建新列表j
j.clear() #清除列表
print(j) #打印结果[]
l = ["to","be","am","is","are"] #创建新列表l
del l[2] #删除l中索引为2的元素
print(l) #输出结果['to', 'be', 'is', 'are']
- sort 对列表进行排序,默认为从小到大排序,或者按字母顺序排序。调整参数可以调整排序方式。
h = [32,54,6,8,2,543,6576,243]
h.sort()
print(h) #输出结果[2, 6, 8, 32, 54, 243, 543, 6576],按数字大小
h.sort(reverse=True)
h.reverse()
print(h) #调整sort中reverse参数或者直接使用reverse方法可以倒序排序,输出结果为[6576, 543, 243, 54, 32, 8, 6, 2]
y = ["p","y","t","h","o","n"]
y.sort()
print(y) #输出结果['h', 'n', 'o', 'p', 't', 'y'],按字母先后顺序
name = ["dhjak ","jkl","dsafd","dasjkdal"]
name.sort(key=len) #调整sort的key参数,可以实现按文本长度排序
print(name) #输出结果['jkl', 'dsafd', 'dhjak ', 'dasjkdal']
元组
- 以小括号形式体现的数据集,不同元素之间用逗号隔开;
- 元组许多功能与列表相似,唯一区别是不能进行修改元素。语法也很简答,在这就不一一赘述。
字典
- 字典由“{}”、“键”以及“值”组合而成,键和值之间用“:”相连。每个键值对之间由“,”相隔;
- 字典是一种无序的映射的集合。包含若干个键值对;
- 其中字典中的键通常采用字符串,但也可以用数字、元组等类型;字典值则可以是任意类型。
思考:有了列表和元组两个容器,我们为什么还需要用字典呢?
接下来给大家举一个例子,用该例子说明我们字典的优势。
#开学了,现在我们这有一份学员名单,以及每个学员的性别,如下:
name = ["zhao","qian","sun","li","zhou","wu","zheng","wang"]
gender = ["F","M","F","F","M","F","M","M"]
#现在我们想知道同学"sun"的性别,于是我们写了以下代码:
print(gender[name.index("sun")])
#上面这行代码当然是可以为我们反馈正确结果的,但是这个代码写起来非常麻烦。如果我们建立了字典,将会大大简化我们的代码。步骤如下:
xueyuan = {"zhao":'F',"qian":'M',"sun":'F',"li":'F',"zhou":'M',"wu":'F',"zheng":'M',"wang":'M'}
print(xueyuan["sun"])
从刚才这个小例子,我们看到了字典的优势,也知道了如何建立字典容器。接下来我们来看字典的基本操作:
- len(dict)返回dict字典中包含的项(键值对)个数;
- dict[a]返回与键a相关联的值;
- dict[b] = value 讲b值关联到key2;
- del dict[c] 删除c的项;
- e in d 检查字典d是否包含键为e的项;
dict1 = {"name":"zhang","age":10} #创建字典
print(len(dict1)) #用函数len()求出字典dict1的键值对个数,返回2
print(dict1["name"]) #通过"[键]"可以查出该键所对应的的值,返回"zhang"
dict1["age"]=12 #更改age所对应的值
print(dict1) #返回结果{'name': 'zhang', 'age': 12}
del dict1["age"] #删除"name"项
print(dict1) #返回结果{'name': 'zhang'}
"name" in dict1 #检查字典dict1中是否包含"name"项,返回True
字典的常用方法
- pop() 从字典中删除,并返回映射值
- popitem() 从字典中删除并返回键值对元组
- clear() 删除字典内的全部对象
d1 = {"a":1,"b":2,"c":3} #创建字典d1
d1.pop("a") #删除键为a的键值对,并且返回值1
print(d1) #返回{'b': 2, 'c': 3}
d1.popitem() #随机的删除d1中某一对键值对,并返回键值对元组。因为字典是无序的,不能确定他每次删除的是哪一项键值对。如果本身字典为空,在执行该语句会报错。
d1.clear() #清除字典内全部对象
print(d1) #返回{}
- copy() 复制字典对象
x = {"name":"张三","age":"9"} #创建一个字典
y = x #直接复制时,x和y引用同一个字典
print(x,y) #返回{'name': '张三', 'age': '9'} {'name': '张三', 'age': '9'}
y["name"]="李四" #将y中键"name"的值改为"李四"
print(x) #x也跟随改变,{'name': '李四', 'age': '9'}
#可以用方法copy()解决这个问题
y = x.copy() #y引用复制字典
y["name"] = "王五" #讲y中键"name"的值改为"王五"
print(y,x) #x也跟随改变,{'name': '王五', 'age': '9'} {'name': '李四', 'age': '9'}
- get(key[,default]) 返回key键映射的值。如果key不存在,返回空值。可以用default参数指定不存在的键的返回值。如下例
x = {"name":"张三","age":"9"} #创建一个字典
x.get("name") #返回键"name"对应值"'张三'
x.get("gender") #没有"gender"键,所以返回空
x.get("gender","none") #设定default参数,当没有"gender"键,返回"none"
- setdefault(key[,default]) 用该方法返回映射值或者添加键值对。
- upgrade() 为字典添加键值对,若字典已存在同名的键,则映射值被覆盖。
x = {"name":"张三","age":"9"} #创建一个字典
x.setdefault("name") #返回键"name"对应值"'张三'
x.setdefault("gender") #添加新键值对
print(x) #返回{'name': '张三', 'age': '9', 'gender': None},默认给None值
x.setdefault('phone','123') #添加新键值对
print(x) #返回{'name': '张三', 'age': '9', 'gender': None, 'phone': '123'}
- items() 返回键值对视图
- keys() 返回字典中所有键的视图
- values() 返回字典中所有值的视图
y = {'name': '张三', 'age': '9', 'gender': None, 'phone': '123'} #创建一个字典
x.items() #返回键值对视图 dict_items([('name', '张三'), ('age', '9'), ('gender', None), ('phone', '123')])
x.keys() #返回所有键的视图 dict_keys(['name', 'age', 'gender', 'phone'])
x.values() #返回所有值的视图 dict_keys(['name', 'age', 'gender', 'phone'])