当前页面: 首页> 资讯百科

Python基础教程:什么是列表和字典

2020-04-25 20:14:18

上一篇,我们已经讲了3种数据类型:整数、浮点数和字符串。今天,我们就要学习两种新的数据类型:列表、字典。

不过在这之前,我想和你先聊一聊‘’计算机“与”数据“之间水乳交融的关系。

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

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

  1. 直接利用数据

    
    
    
    # 直接使用数据,比如print()语句,可以直接把我们提供的数据打印出来,通常所见即所得。
    
    print(asiaseo)
    print("昆明SEO请搜索asiaseo")
  2. 计算和加工数据

    # 计算机会先计算/加工数据,再用print(语句打印)
    
    print(2+2)
    print("昆明SEO"+"请搜索asiaseo")


    
    
  3. 用数据做判断

    
    
    
    # 计算机使用数据做判断
    
    age = int(input("请输入您的年龄 :"))
    
    if age < 0 :
        print("你还在娘胎里呢。")
    
    elif age == 0 :
        print("欢迎来到这个世界")
    
    elif age <18 :
        print("小小年纪还不懂什么是爱")
    
    else:
        print("你已经是一个成熟的大人了,要学会照顾自己")

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

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

为什么这么说呢?前面学的几种类型,每次赋值只能保存一条数据。如果我们需要使用很多数据的时候,就会很不方便。

而列表和字典的作用,就是刻意帮我们存储大量数据,让计算机去读取和操作。

列表

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

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

我们需要将每个学生的名字都赋值到一个变量名,然后分别打印。代码是这样的:



student1 = "张三"
student2 = "李四"
student3 = "王五"
student4 = "赵六"
student5 = "孙七"

print(student1,student2,student3,student4,student5)

但我们知道,在编程世界里,最忌讳的就是“重复性劳动"。这么多代码打下来,即使是复制粘贴修改的,分分钟也要抓狂,更何况这才5名学生,正常班级都是有50多名学生的呀。

实际上,我们只要学会了列表和循环(循环下一篇教程讲),3行代码就能搞定。



students = ['张三','李四','王五','赵六','孙七']
for i in students :
    print(i)

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

什么是列表

首先,我们来看看列表(list)的代码格式

Python基础教程:什么是列表和字典

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

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

这就是列表的标准格式。

列表很包容,各种类型的数据(整数/浮点数/字符串),无所不能包。

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

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

从列表提取单个元素

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

Python基础教程:什么是列表和字典

从上图可得:


  1. 偏移量是从0开始的,而非我们习惯的从1开始;

  2. 列表名后加带偏移量的中括号,就能取到相应位置的元素。


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

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



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

现在我们已经知道了如何从列表中取出一个元素,那如果同时取好几个呢?所以我们接着学习从列表中取出多个元素。

从列表提取多个元素

请运行以下代码,对比代码和终端最后的结果,尝试发现当中的规律。

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



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]

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

列表切片口诀:左右空,取到头;左要取,右不取。

现在将之前代码中的小明和小红两个元素一起取出来:



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

另外,我们要注意一个细节:偏移量取到的是列表中的元素,而切片则是截取了列表的某部分,所以还是列表。

给列表增加/删除元素

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



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

用append()给列表增加元素,每次只能增加一个元素。

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

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

根据上图的知识,将'小红'从列表中删除,并打印出来:



students = ['小明','小红','小刚','小美']
del students[1]
print(students)

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

Python基础教程:什么是列表和字典

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

数据类型:字典

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

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

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

什么是字典

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

Python基础教程:什么是列表和字典

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

而不一样的有两处:


  1. 列表外层用的是中括号[],字典的外层是大括号{};

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


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

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

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



scores = {'小明':95,'小红':90,'小刚':90}
print(scores['小明'])

这便是从字典中提取对应的值的用法。和列表相似的是要用[],不过因为字典没有偏移量,所以在中括号中应该写键的名称,即字典名[字典的键]。

现在你也知道如何取字典的值了。

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

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

给字典增加/删除元素

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



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

del album['周杰伦']
print(album)
# {'王力宏': '心中的日月'}

album['周杰伦'] = '十一月的萧邦'
print(album)
# {'王力宏': '心中的日月', '周杰伦': '十一月的萧邦'}

print(album['周杰伦'])
# 十一月的萧邦

我们可以发现:删除字典里键值对的代码就是del语句 del 字典名[键],而新增键值对要用到赋值语句字典名[键]=值.

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



scores = {'小明':95,'小红':90,'小刚':90}
scores['小刚'] = '92'
scores['小美'] = '85'

print(scores)

好了,这里,我们来总结下字典的基础知识:

Python基础教程:什么是列表和字典

列表和字典的异同

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

列表和字典的不同点

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



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

print(1 == 1)  
# 1等于1,所以值为True

print(1 == 2)
# 1不等于2,所以为False

students1 = ['小明','小红','小刚']
students2 = ['小刚','小明','小红']
print(students1 == students2)
# 偏移量不用为False

scores1 = {'小明':95,'小红':90,'小刚':100}
scores2 = {'小刚':100,'小明':95,'小红':90}
print(scores1 == scores2)
# 键相同,所以为True

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

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

列表和字典的相同点

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



list1 = ['小明','小红','小刚','小美']
list1[1] = '小蓝'
print(list1)
# ['小明', '小蓝', '小刚', '小美']

dict1 = {'小明':'男'}
dict1['小明'] = '女'
print(dict1)
# {'小明': '女'}

所以,之前案例修改小刚成绩的时候,其实直接用赋值语句即可。

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

先来看看第一种情况:列表嵌套列表。你在班级里成立以四人为单位的学习小组。这时,列表的形式可以写成:



students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]
print(students)
# [['小明', '小红', '小刚', '小美'], ['小强', '小兰', '小伟', '小芳']]

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

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

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

Python基础教程:什么是列表和字典

接下来,我们再来看看第二种情况:字典嵌套字典

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



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。

祝贺你,对列表和字典的认识又更进一步。



seo