inullbyte 发表于 2020-12-2 10:27

【笔记04】数据升级,列表字典能处理

欢迎来到我的《Python 扫盲栏目》,力求用最短的时间,最简明的文字,让你了解、掌握 Python 基础语法。

我分享的笔记都是自己学习时的记录整理而成,不保证有多厉害,但还是那两句话:

**不要嫌弃内容简陋,循序渐进嘛!**
**不要嫌弃知识简单,动手敲敲吧!**

第 0 期:[《做个尝试,从零到一》](https://www.52pojie.cn/thread-1316697-1-1.html)
第 1 期:[《铺石造路,我学会了输入输出》](https://www.52pojie.cn/thread-1317221-1-1.html)
第 2 期:[《玩转数据,这是第一步》](https://www.52pojie.cn/thread-1317496-1-1.html)
第 3 期:[《学会判断,告诉电脑怎么做》](https://www.52pojie.cn/thread-1318454-1-1.html)
第 4 期:《数据升级,列表字典能处理》


---

列表和字典可以存储大量数据,以供计算机读取、操作。

# 列表

eg.

```python
# 这就是一个列表
menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
# 这里是一个循环语句
for i in menu:
    print('我想吃' + i)
```

输出:

> 我想吃水煮鱼
>
> 我想吃火锅
>
> 我想吃美蛙
>
> 我想吃青菜
>
> 我想吃馒头

以上就是列表的使用,有了列表我们可以只需要一个变量就可以存放多个数据了。

`menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']` 中:`menu` 是一个变量,`=` 表示赋值,`['水煮鱼', '火锅', '美蛙', '青菜', '馒头']` 是一个列表。

列表就是用中括号 `[]` 把各种数据括起来,列表里的每一个数据叫做**元素**,每个元素之间使用英文逗号分隔。

列表可以直接打印:

eg.

```python
menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
print(menu)
```

输出:

> ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']

**注意**:一个列表里可以包含多个、不同数据类型的数据。

eg.

```python
person = ['李明', 17, 1.78]
```

## 从列表中提取元素

在列表中,每个元素都有自己的位置编号,也叫偏移量。

偏移量从 0 开始计算,我们可以通过偏移量获取列表中的每一个元素:

eg.

```python
menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
print(menu)
# 列表名后加带有偏移量的中括号,即可取到相应元素
```

输出:

> 美蛙

我们也可以同时从一个列表中获取多个元素:

eg.

```python
menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
print(menu[:])
print(menu)
print(menu[:1])
print(menu)
print(menu)
```

输出:

> ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
>
> ['火锅', '美蛙', '青菜', '馒头']
>
> ['水煮鱼']
>
> ['火锅', '美蛙']
>
> ['美蛙']

以上通过 `:` 来截取列表中的元素的方法叫做**切片**,通过切片我们就可以从列表中取得多个元素。

**切片的规则**:

- 冒号左边空,就从偏移量为 0 的元素开始取
- 冒号右边空,就要取到列表最后一个元素
- 冒号左边有数字,取出对应数字的偏移量的元素
- 冒号右边有数字,不取出对应数字的偏移量的元素

**注意**:通过偏移量取元素是可以直接取到列表中的元素,但是切片则只是截取了列表的一部分,取出的还是一个列表。

## 增加/删除元素

我们可以通过几个函数实现列表中元素的增加或者删除。

### append()

eg.

```python
menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
menu.append('统统 10 元!')
print(menu)

menu.append(['李明', 17, 1.78])
print(menu)
```

输出:

> ['水煮鱼', '火锅', '美蛙', '青菜', '馒头', '统统 10 元!']
>
> ['水煮鱼', '火锅', '美蛙', '青菜', '馒头', '统统 10 元!', ['李明', 17, 1.78]]

append() 函数每次只能接收一个参数,也就是使用 append() 给列表增加元素只能一个一个元素地增加。

**Tags**:

- 列表中的元素可以是字符串、数字等,也可以是列表(列表的嵌套)
- append() 函数接收的参数只能是一个,一个列表也算是一个参数
- 通过 append() 函数向列表添加元素,新添加的元素会添加在列表末尾

由此还可知,列表的长度是可变的,且理论上容量无限,支持任意嵌套。

### del 语句

> del 语句可以根据索引而不是值从列表中删除一个元素,这与 pop 语句不同(pop 语句会返回一个值),del 语句也可以用于从列表中删除片段或者清除整个列表。

del 语句是非常方便的,既能删除一个元素,也能一次删除多个元素(类似于切片原理)

eg.

```python
menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
del menu
print(menu)

del menu
print(menu)
```

输出:

> ['水煮鱼', '火锅', '青菜', '馒头']
>
> ['水煮鱼', '馒头']

# 字典

对于几组数据一一对应的数据需要存储时,一个列表是不够用的,这个时候就需要使用字典。

eg.

```python
scores = {'李明':99, '川普':0, '旺财':87}
```

以上,`scores` 是变量名,`=` 表示赋值,`{'李明':99, '川普':0, '旺财':87}` 就是一个字典,字典内部依然使用英文逗号 `,` 分隔,外部使用大括号 `{}` 括起来。

字典里的元素是由一个一个的键值对组成的,键与值使用英文冒号连接,键(key):`'李明'`、值(value):`99`、键值对:`'李明':99`。

**注意**:字典中的键是唯一不可重复的,但是值是不唯一可以重复的。

## 从字典中提取元素

提取字典中的元素并不能像列表一样使用偏移量来索引,字典的索引依靠键。

eg.

```python
scores = {'李明':99, '川普':0, '旺财':87}
print(scores['川普'])
```

输出:

> 0

**注意**:使用键索引来提取值时,变量名后面接的是中括号 `[]`。

## 增加/删除元素

eg.

```python
scores = {'李明':99, '川普':0, '旺财':87}
del scores['川普']
print(scores)

scores['川普'] = 59
print(scores)
```

输出:

> {'李明':99, '旺财':87}
>
> {'李明':99, '旺财':87, '川普':59}

以上,字典删除元素依然是使用 del 语句,通过 `del 字典名[键]` 就可以删除对应的键值对,而新增键值对则直接赋值 `字典名[键] = 值`。

新增的键值对依然是增加在字典的末尾,而且我们也可以通过直接赋值的方式修改键对应的值。

eg.

```python
scores = {'李明':99, '川普':0, '旺财':87}
scores['川普'] = 59
print(scores)
```

输出:

> {'李明':99, '川普':59, '旺财':87}

# 列表和字典的异同

列表和字典有许多相似之处,但是又有所不同。

## 异

列表中的元素是有自己的位置的,即使两个列表的元素完全相同,但是元素排列的位置不同,这两个列表也是完全不同的,即列表中的元素是有序的,字典中的元素是无序的,这也是为什么列表可以通过偏移量来引索到元素,而字典就不行。

eg.

```python
menu1 = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
menu2 = ['水煮鱼', '美蛙', '火锅', '青菜', '馒头']
print(menu1 == menu2)

scores1 = {'李明':99, '川普':0, '旺财':87}
scores2 = {'李明':99, '旺财':87, '川普':0}
print(scores1 == scores2)
```

输出:

> False
>
> True

## 同

① 无论是列表还是字典,都可以通过赋值语句来对元素进行修改。

eg.

```python
menu = ['水煮鱼', '火锅', '美蛙', '青菜', '馒头']
menu = '川普'
print(menu)

scores = {'李明':99, '川普':0, '旺财':87}
scores['川普'] = 59
print(scores)
```

输出:

> ['水煮鱼', '火锅', '川普', '青菜', '馒头']
>
> {'李明':99, '川普':59, '旺财':87}

② 列表和字典都支持任意嵌套,除了一般的数据类型以外,列表可以嵌套其他列表和字典,字典也可以嵌套其他字典和列表。

eg.

```python
# 列表嵌套列表
menu = [
    ['水煮鱼', '火锅', '美蛙'],
    ['青菜', '馒头']
]

# 获取 '青菜'
print(menu)
```

输出:

> 青菜

这个时候列表里元素的获取就有一点不同了,需要一层一层获取到,如上。

eg.

```python
# 字典嵌套字典
scores = {
    '李明':{'身高':180, '体重':70},
    '川普':{'身高':150, '体重':99.9},
    '旺财':{'身高':172, '体重':59}
}

# 获取 '川普' 的 '身高'
print(scores['川普']['身高'])
```

输出:

> 150

下面是列表和字典相互嵌套:

eg.

```python
# 字典里嵌套列表
scores = {
    '李明':,
    '川普':,
    '旺财':
}
# 获取某一元素同理
print(scores['川普'])

# 列表里嵌套字典
menu = [
    {'水煮鱼':80, '火锅':230, '美蛙':150},
    {'青菜':2, '馒头':0.5}
]
# 获取某一元素同理
print(menu['火锅'])
```

输出:

> 230

**给个免费评分我能写得更好!**

warmly 发表于 2020-12-2 11:08

写得通俗易懂!

LXS 发表于 2020-12-2 11:14

牛皮。做得太好了

wanshiz 发表于 2020-12-2 17:30

进来学习一下,感谢分享。

q515094609 发表于 2020-12-2 23:08

对我这种小白太友好了,希望一直写下去

antcna 发表于 2020-12-9 21:00

开始跟着学习

lucifer52 发表于 2020-12-10 00:12

加油加油!支持你,继续努力,期待你的更新。

shr123 发表于 2020-12-15 23:21

楼主是和川普杠上了吗,一会赋值川普一会删除川普
页: [1]
查看完整版本: 【笔记04】数据升级,列表字典能处理