Python基础笔记3-列表、元组、字典


温馨提示:手机观看时,代码块可以左右滑动

本文内容

  • 列表新建

索引
切片
序列的加法和乘法
成员资格
列表方法

  • 元组
  • 字典

字典常用方法

写在前面

  • 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'])

上一篇:Python基础笔记2-字符串方法(更新中)
下一篇:Python基础笔记4-函数编写与传参方式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容