列表与字典




文章目录

  • 列表与字典
  • 前言
  • 一、列表
  • 1.列表元素的提取
  • 1.1,单个元素的提取
  • 1.2,多个元素的提取
  • 2.列表增加/删除元素
  • 二、数据类型:字典
  • 1.什么是字典
  • 2.从字典提取元素
  • 3.给字典更改和删除元素
  • 三,列表和字典的异同
  • 1.列表与字典的不同点
  • 2.列表与字典的相同点
  • 2.1,列表嵌套列表
  • 2.2,字典嵌套字典
  • 2.3,列表和字典相互嵌套



前言

截至目前,我们已经掌握了3种数据类型:整数、浮点数、字符串。这一关我们就要学习两种新的数据类型:列表、字典。
不过在这之前,我想先和你聊一聊“计算机”与“数据”之间水乳交融的关系。
计算机名字里就有【计算】两字,如果计算机离开了数据,就如巧妇难为无米之炊。所以说,数据对于计算机很重要。

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

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

第二种:计算和加工数据,计算机会先计算/加工 数据,再用print()语句
这两个print语句,计算机都是先【计算和加工数据】,再把print()括号里的数据打印到屏幕里。

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

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

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

if a<0:
    print('你还在娘胎里呢。')
elif a == 0:
    print('欢迎来到这个世界。')
elif a < 18:
    print('小小的年纪还不懂什么是爱')
else:
    print('你已经是个成熟的大人了,要学会照顾自己。')

可以看出,计算机在这里是【利用数据用做逻辑判断】:
那现在我们对【计算机】和【数据】的关系有了一定的了解吧,也正因为数据的重要性,所以对于编程新手来说,掌握主要的数据类型是重中之重。

现在我们会接触两种新的数据类型——**列表和字典,**你会发现,它们比我们学过的“整数、浮点数、字符串”更加高级,更有“包容性”
为什么这么说呢?前面学的几种类型,每次赋值只能保存一条数据。如果我们需要使用很多数据的时候,就会很不方便。
而列表和字典的作用,就是可以帮我们存储大量数据,让计算机去读取和操作。



一、列表

现在我们会接触两种新的数据类型——列表和字典,**你会发现,它们比我们学过的“整数、浮点数、字符串”更加高级,更有“包容性”
因为
**前面学的几种类型,每次赋值只能保存一条数据。如果我们需要使用很多数据的时候,就会很不方便。
而列表和字典的作用,就是可以帮我们存储大量数据,让计算机去读取和操作。

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

[‘小明’,‘小红’,‘小刚’]就是一个列表。
一个列表需要用中括号**[ ]把里面的各种数据框起来,里面的每一个数据叫作“元素”。每个元素之间都要用英文逗号隔开**,这就是列表的标准格式。

1.列表元素的提取

1.1,单个元素的提取

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

与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。

通过索引列表可以进行截取、组合等操作。

list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[0] )
#打印出['red']
print( list[1] )
#打印出['green']

索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推

list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[-1] )
#打印出['black']
print( list[-2] )
#打印出['white']

1.2,多个元素的提取

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

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]

冒号左边空,就要从偏移量为0的元素开始取;右边空,就要取到列表的最后一个元素。冒号左边数字对应的元素要拿,右边的不动(左闭右开)

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



2.列表增加/删除元素

当我们想要给列表增加元素时,我们就需要用到append()函数给列表增加元素,append的意思是附加,增补。

append函数有以下特点:
1.append函数之后的参数只能是一个(单个列表视为一个)
2.append函数之后的元素会添加在列表的末尾
3.append函数并不生成一个新列表,而是让列表末尾新增一个元素。而且,列 表长度可变,理论容量无限,所以支持任意的嵌套。

list3 = [1,2]
list3.append(3)
print(list3)


list3.append([4,5])
print(list3)

代码结果如下:

[1,2,3]

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

现在你已经知道如何增添列表中的元素了。接下来我们一起来看一下如何删除列表中的元素。
这时需要用到del语句,语法格式如下:

del 列表名[元素的索引]

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

代码结果如下:

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

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

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

二、数据类型:字典

1.什么是字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 。

字典中的键具备唯一性,而值可重复。
如果你不小心声明了两个相同的键的【键值对】,后出现的【键值对】会覆盖前面的【键值对】。

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

代码结果如下:

['小明':90,'小红':90]

2.从字典提取元素

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

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

代码结果如下:

95

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

3.给字典更改和删除元素

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

album = {'周杰伦':'七里香','王力宏':'心中的日月'}
del album['周杰伦']
print(album)

代码结果如下:

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

可以看到,周杰伦这组字典的键值被删除了。

更改字典里键值对要用到赋值语句:字典名[键] = 值

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

代码结果如下:

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

三,列表和字典的异同

1.列表与字典的不同点

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

students1 = ['小明','小红','小刚']
students2 = ['小刚','小明','小红']
print(students1 == students2)

scores1 = {'小明':95,'小红':90,'小刚':100}
scores2 = {'小刚':100,'小明':95,'小红':90}
print(scores1 == scores2)

代码结果如下:

True
False

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

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

2.列表与字典的相同点

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

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

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

代码结果如下:

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

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

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

2.1,列表嵌套列表

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

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

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

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

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

小芳是students[1]列表里偏移量为3的元素,所以要取出小芳,代码可以这么写:

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

代码结果如下:

小芳

2.2,字典嵌套字典

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

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

代码结果如下:

88

2.3,列表和字典相互嵌套

# 最外层是大括号,所以是字典嵌套列表,先找到字典的键对应的列表,再判断列表中要取出元素的偏移量
students = {
    '第一组':['小明','小红','小刚','小美'],
    '第二组':['小强','小兰','小伟','小芳']
    }
print(students['第一组'][3])
#取出'第一组'对应列表偏移量为3的元素,即'小美'

# 最外层是中括号,所以是列表嵌套字典,先判断字典是列表的第几个元素,再找出要取出的值相对应的键
scores = [
    {'小明':95,'小红':90,'小刚':100,'小美':85},
    {'小强':99,'小兰':89,'小伟':93,'小芳':88}
    ]
print(scores[1]['小强'])
#先定位到列表偏移量为1的元素,即第二个字典,再取出字典里键为'小强'对应的值,即99。