列表、字典

计算机名字里就有【计算】两字,如果计算机离开了数据,就如巧妇难为无米之炊。所以说,数据对于计算机很重要。

总的来说,计算机有3种方式利用数据:


第一种:直接使用数据,比如print()语句,可以直接把我们提供的数据打印出来,通常所见即所得。

# 直接运行即可

# print()会直接把我们提供的数据打印出来

print(3)

print('欢迎来到第4关')

第二种:计算和加工数据,让我们看个例子

# 直接运行即可

# 计算机会先计算/加工 数据,再用print()语句打印

print(3+2*3)

print('欢迎来到'+'第4关')

第三种:用数据做判断是怎么一回事。

# 计算机会使用数据来做判断

a = int(input('请输入你的年龄:'))

#如果输入不了数字,请切换成英文输入法

if a<0:

    print('你还在娘胎里呢。')

elif a == 0:

    print('欢迎来到这个世界。')

elif a < 18:

    print('小小的年纪还不懂什么是爱')

else:

    print('你已经是个成熟的大人了,要学会照顾自己。')

计算机在这里是【利用数据用做逻辑判断】:


对【计算机】和【数据】的关系有了一定的了解吧,也正因为数据的重要性,所以对于编程新手来说,掌握主要的数据类型是重中之重。

这一关,我们就会接触两种新的数据类型——列表和字典,你会发现,它们比我们学过的“整数、浮点数、字符串”更加高级,更有“包容性”。

为什么这么说呢?前面学的几种类型,每次赋值只能保存一条数据。如果我们需要使用很多数据的时候,就会很不方便。而列表和字典的作用,就是可以帮我们存储大量数据,让计算机去读取和操作。

列表


为了感受列表的作用,我们来玩玩角色扮演的游戏:从现在起,你就是一个新班级的班主任了!

第一天,班上来了50个新鲜的面孔。你让学生把名字写在花名册上,方便上课时一个个点名。

如果只能用已学的知识来解决这个问题,我们需要将每个学生的名字都赋值到一个变量名,然后再分别打印。代码是这样的:

student50 = '桂永怡'

print(student50+'在不在?')

但我们知道,在编程世界里,最忌讳的就是“重复性劳动”。这一百行代码打下来,即使是复制黏贴修改的,分分钟也要抓狂。

只要学会了列表和循环(剧透:循环下一关会讲,可先忽略),3行代码就能搞定。

students = ['党志文', '浦欣然', '罗鸿朗', '姜信然', '居俊德', '宿鸿福', '张成和', '林景辉', '戴英华', '马鸿宝', '郑翰音', '厉和煦', '钟英纵', '卢信然', '任正真', '翟彭勃', '蒋华清', '双英朗', '金文柏', '饶永思', '堵宏盛', '濮嘉澍', '戈睿慈', '邰子默', '于斯年', '扈元驹', '厍良工', '甘锐泽', '姚兴怀', '殳英杰', '吴鸿福', '王永年', '宫锐泽', '黎兴发', '朱乐贤', '关乐童', '养永寿', '养承嗣', '贾康成', '韩修齐', '彭凯凯', '白天干', '瞿学义', '那同济', '衡星文', '公兴怀', '宫嘉熙', '牧乐邦', '温彭祖', '桂永怡']

for i in students:

    print(i+'在不在?')

在第一行代码里,赋值号右边不再像字符串那样只能放一个名字,而是放了50个。

这就是我们要新认识的第一个数据类型——列表,下面我会从4个方面来介绍列表的用法。

什么是列表

我们来看看列表(list)的代码格式:


图中的['小明','小红','小刚']就是一个列表。

一个列表需要用中括号[ ]把里面的各种数据框起来,里面的每一个数据叫作“元素”。每个元素之间都要用英文逗号隔开。

这就是列表的标准格式,现在请你创建一个列表名为list1的列表,列表里有三个元素:'小明'、18、1.70,并将其打印出来:

list1=['小明',18,1.70]

print(list1)

恭喜你,成功掌握了列表的规范写法以及打印列表的方法。而且,你也用代码验证了一个知识点:列表很包容,各种类型的数据(整数/浮点数/字符串)无所不能包。

不过,很多时候,我们只需要用到列表中的某一个元素,好比老师上课点名时,不会说“所有的同学都站起来回答一下这个问题”。

问题来了:列表中具体的某个元素,要如何取出来?

从列表提取单个元素

偏移量。列表中的各个元素,好比教室里的某排学生那样,是有序地排列的,也就是说,每个元素都有自己的位置编号(即偏移量)。


1.偏移量是从0开始的,而非我们习惯的从1开始;2.列表名后加带偏移量的中括号,就能取到相应位置的元素。

我们可以通过偏移量来对列表进行索引(可理解为搜索定位),读取我们所需的元素。

你现在要喊小明来回答问题,用代码怎么写呢?请补充下列代码,利用列表的偏移量来打印出'小明'这个元素。

students=['小明','小红','小刚']print(students[0])

那如果要同时取好几个呢?所以我们接着学习如何从列表中取出多个元素。

从列表提取多个元素

老师不会直接告诉你需要用到的知识,而是想让你自己总结出规律。

请运行以下代码,对比代码和终端最后的结果,尝试发现当中的规律。老师过会儿会考考你。

一个提醒:下列:左右两边的数字指的是列表中元素的偏移量,记住偏移量(索引)始终是从0开始的。

list2 = [5,6,7,8,9]

print(list2[:])

print(list2[2:])

print(list2[:2])

print(list2[1:3])

print(list2[2:4])

这种用冒号来截取列表元素的操作叫作切片,顾名思义,就是将列表的某个片段拿出来处理。这种切片的方式可以让我们从列表中取出多个元素。

list2=[5,6,7,8,9]print(list2[:])# 打印出[5,6,7,8,9]print(list2[2:])# 打印出[7,8.9]print(list2[:2])# 打印出[5,6]print(list2[1:3])#打印出[6,7]print(list2[2:4])#打印出[7,8]


list=[5,6,7,8,9]

print(list2[2:4])

#打印出[7,8]  左要取,右不取  2取7 , 4取8,9不取

在就请你来试验一下吧,请修改代码,用切片将列表中小明和小红两个元素一起取出来。

students = ['小明','小红','小刚']

print(students[……])

students=['小明','小红','小刚']

print(students[:2])

print(stuednt[0:2])

要注意一个细节:偏移量取到的是列表中的元素,而切片则是截取了列表的某部分,所以还是列表,请你运行下列代码看一看。

students = ['小明','小红','小刚']

print(students[2])

print(students[2:])

给列表增加/删除元素

过了一周,你正上着课呢,教导主任突然领了一个新学生“小美”,说是转校生,要插到你们班。这时,我们就需要用到append()函数给列表增加元素,append的意思是附加,增补。

# 请运行以下代码:报错后,可读一下报错信息,然后将第6行注释掉再运行。

list3 = [1,2]

list3.append(3)

print(list3)

#list3.append(4,5)

list3.append([4,5])

print(list3)

[1, 2, 3]

[1, 2, 3, [4, 5]]

你发现规律了吗?我们来解读一下报错信息和代码的结果:


append后的括号里只能接受一个参数,但却给了两个,也就是4和5。所以,用append()给列表增加元素,每次只能增加一个元素。


append函数并不生成一个新列表,而是让列表末尾新增一个元素。而且,列表长度可变,理论容量无限,所以支持任意的嵌套。

请你把小美加入students列表中,并打印出列表,注意格式是列表名.append( ):

students=['小明','小红','小刚']students.append('小美')print(students)

很棒哟~现在你已经知道如何增添列表中的元素了。

又是新的一天,你接到一个电话,小红生病请假了,今天不来上课。所以,你要将小红从列表中删除。

需要用到del语句。请你先读一下Python官方文档对“del语句”的解释:(懂得阅读官方文档也是编程学习中一个重要能力)


students = ['小明','小红','小刚','小美']

del students[1]

print(students)

事实上del语句非常方便,既能删除一个元素,也能一次删除多个元素(原理和切片类似,左取右不取)。


掌握了这些,列表这种数据类型,你就算入门了。后续就是在练习和项目中不断积累经验,活用列表。接下来我们就来学习另外一种数据类型。

数据类型:字典

一个老师的日常就是出卷、改卷。这次期中考呢,小明、小红、小刚分别考了95、90和90分。

假如我们还用列表来装数据的话,我们需要新创建一个列表来专门放分数,而且要保证和姓名的顺序是一致的,很麻烦。

所以类似这种名字和数值(如分数、身高、体重等)两种数据存在一一对应的情况,用第二种数据类型——“字典”(dictionary)来存储会更方便。

什么是字典

我们先来看一下字典是长怎么样的:


仔细看下,字典和列表有3个地方是一样的:1.有名称;2.要用=赋值;3.用逗号作为元素间的分隔符。

不一样的有两处:1.列表外层用的是中括号[ ],字典的外层是大括号{ };

students=['小明','小红','小刚']

scores={'小明':95,'小红':90,'小刚':90}

列表中的元素是自成一体的,而字典的元素是由一个个键值对构成的,用英文冒号连接。如'小明':95,其中我们把'小明'叫键(key),95叫值(value)。

这样唯一的键和对应的值形成的组合,我们就叫做【键值对】,上述字典就有3个【键值对】:'小明':95、'小红':90、'小刚':90

如果不想口算,我们可以用len()函数来得出一个列表或者字典的长度(元素个数),括号里放列表或字典名称。

students = ['小明','小红','小刚']

scores = {'小明':95,'小红':90,'小刚':90}

print(len(students))    #3

print(len(scores)) #3

这里需要强调的是,字典中的键具备唯一性,而值可重复。也就是说字典里不能同时包含两个'小明'的键,但却可以有两个同为90的值。

我们尝试将小明的成绩从字典里打印出来。这就涉及到字典的索引,和列表通过偏移量来索引不同,字典靠的是键。

scores = {'小明': 95, '小红': 90, '小刚': 90}

print(scores['小明'])

这便是从字典中提取对应的值的用法。和列表相似的是要用[ ],不过因为字典没有偏移量,所以在中括号中应该写键的名称,即字典名[字典的键]。现在请你将小红的成绩也打印出来吧,亲手打打代码,才能快速掌握。

scores={'小明':95,'小红':90,'小刚':90}

print(scores['小红'])  #print(scores["小红"])也对。不分单引号,又引号

小刚拿到试卷后,下课后来找你,说把他总分算错了,应该是92分。你看了一下,发现还真的是。于是,你在成绩册上将90划掉,改成了92。

这个操作在代码里对应的是字典的删除和增加。

给字典增加/删除元素

先来看一个例子,运行下面的代码,留意字典怎么删除以及新增键值对:

album = {'周杰伦':'七里香','王力宏':'心中的日月'}

del album['周杰伦']

print(album)

album['周杰伦'] = '十一月的萧邦'

print(album)

print(album['周杰伦'])

{'王力宏': '心中的日月'}

{'王力宏': '心中的日月', '周杰伦': '十一月的萧邦'}

十一月的萧邦

删除字典里键值对的代码是del语句del 字典名[键],而新增键值对要用到赋值语句字典名[键] = 值。

请你把小刚的成绩改成92分吧。对了,新来的小美也考了,得了85。请你对字典里进行修改和新增,然后将整个字典都打印出来。

scores={'小明':95,'小红':90,'小刚':90}

del scores['小刚']

scores['小刚']=92

scores['小美']=85

print(scores)



列表和字典的异同

列表和字典同作为Python里能存储多条数据的数据类型,有许多共同点,也有值得我们注意的不同点,那么接下来我们先来看看不同点。

列表和字典的不同点

一个很重要的不同点是列表中的元素是有自己明确的“位置”的,所以即使看似相同的元素,只要在列表所处的位置不同,它们就是两个不同的列表。我们来看看代码:

# 如果==左右两边相等,值为True,不相等则为False。

print(1 == 1) 

# 1等于1,所以值为True

print(1 == 2)

# 1不等于2,所以为False

students1 = ['小明','小红','小刚']

students2 = ['小刚','小明','小红']

print(students1 == students2)

scores1 = {'小明':95,'小红':90,'小刚':100}

scores2 = {'小刚':100,'小明':95,'小红':90}

print(scores1 == scores2)

True

False

False

True

而字典相比起来就显得随和很多,调动顺序也不影响。因为列表中的数据是有序排列的,而字典中的数据是随机排列的。

这也是为什么两者数据读取方法会不同的原因:列表有序,要用偏移量定位;字典无序,便通过唯一的键来取值。

共同点:在列表和字典中,如果要修改元素,都可用赋值语句来完成。看一下代码:

list1 = ['小明','小红','小刚','小美']

list1[1] = '小蓝'

print(list1)

dict1 = {'小明':'男'}

dict1['小明'] = '女'

print(dict1)

['小明', '小蓝', '小刚', '小美']

{'小明': '女'}

面修改小刚成绩的时候,其实直接用赋值语句即可,del语句通常是用来删除确定不需要的键值对。

scores={'小明':95,'小红':90,'小刚':90}#del scores['小刚']#如果只需要修改键里面的值,可不需要del语句scores['小刚']=92

第二个共同点其实之前已经略有提及,即支持任意嵌套。除之前学过的数据类型外,列表可嵌套其他列表和字典,字典也可嵌套其他字典和列表。

列表嵌套列表。你在班级里成立了以四人为单位的学习小组。这时,列表的形式可以写成:

students=[['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]

students这个列表是由两个子列表组成的,现在有个问题是:我们要怎么把小芳取出来呢?

可能你数着小芳是列表的第7个元素(从0开始),所以想students[7]不就能取到小芳吗?

事情当然没有那么简单,当我们在提取这种多级嵌套的列表/字典时,要一层一层地取出来,就像剥洋葱一样:


现在,我们确定了小芳是在students[1]的列表里,继续往下看。



小芳是students[1]列表里的第三个元素,所以要取出小芳,代码可以这么写:

print(students[1][3])

发挥你的聪明才智,从列表中取出小兰,并打印出来吧。

print(students[1][1])

和列表嵌套列表也是类似的,需要一层一层取出来,比如说要取出小芳的成绩,代码是这样写:

scores={'第一组':{'小明':95,'小红':90,'小刚':100,'小美':85},'第二组':{'小强':99,'小兰':89,'小伟':93,'小芳':88}}print(scores['第二组']['小芳'])


# 最外层是大括号,所以是字典嵌套列表,先找到字典的键对应的列表,再判断列表中要取出元素的偏移量\

students={'第一组':['小明','小红','小刚','小美'],'第二组':['小强','小兰','小伟','小芳']}

print(students['第一组'][3])

#取出'第一组'对应列表偏移量为3的元素,即'小美'# 最外层是中括号,所以是列表嵌套字典,先判断字典是列表的第几个元素,再找出要取出的值相对应的键

scores=[{'小明':95,'小红':90,'小刚':100,'小美':85},{'小强':99,'小兰':89,'小伟':93,'小芳':88}]

print(scores[1]['小强'])

#先定位到列表偏移量为1的元素,即第二个字典,再取出字典里键为'小强'对应的值,即99。

students = {

    '第一组':['小明','小红','小刚','小美'],

    '第二组':['小强','小兰','小伟','小芳']

    }

scores = [

    {'小明':95,'小红':90,'小刚':100,'小美':85},

    {'小强':99,'小兰':89,'小伟':93,'小芳':88}

    ] 

print(students['第一组'][2])

print(scores[0]['小刚'])

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

推荐阅读更多精彩内容