分享

中信建投 & 课程

 昵称6262245 2020-03-17
## 什么是Python?
Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。
那Python是一种什么语言?
首先,我们普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。而不同的编程语言,干同一个活,编写的代码量,差距也很大。
比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
所以Python是一种相当高级的语言。
你也许会问,代码少还不好?代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。
那是不是越低级的程序越难学,越高级的程序越简单?表面上来说,是的,但是,在非常高的抽象计算中,高级的Python程序设计也是非常难学的,所以,高级程序语言不等于简单。
但是,对于初学者和完成普通任务,Python语言是非常简单易用的。连Google都在大规模使用Python,你就不用担心学了会没用。
用Python可以做什么?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。
Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。
本篇教程将讲述Python基础的<font color=red>数据类型</font>

什么是Python?

Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。

那Python是一种什么语言?

首先,我们普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。而不同的编程语言,干同一个活,编写的代码量,差距也很大。

比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。

所以Python是一种相当高级的语言。

你也许会问,代码少还不好?代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。

那是不是越低级的程序越难学,越高级的程序越简单?表面上来说,是的,但是,在非常高的抽象计算中,高级的Python程序设计也是非常难学的,所以,高级程序语言不等于简单。

但是,对于初学者和完成普通任务,Python语言是非常简单易用的。连Google都在大规模使用Python,你就不用担心学了会没用。

用Python可以做什么?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。

Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。

本篇教程将讲述Python基础的数据类型

# 基本的数据类型
在Python中,能够直接处理的数据类型有以下几种:
## 整数
Python可以处理任意大小的整数,包括负整数,写程序的时候表述与数学上的方法一样,例如:<font color=#0099ff>99</font>,<font color=#0099ff>-3</font>,<font color=#0099ff>6666</font> 等等。
## 浮点数 
浮点数也可以称为小数。叫做浮点数是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的。比如,<font color=#0099ff>1.11x10<sup>6</sup></font>和<font color=#0099ff>11.1x10<sup>5</sup></font>是完全相等的。对于很大或很小的浮点数,必须用科学计数法表示,把10用e替代,<font color=#0099ff>1.11x10<sup>6</sup></font>就是<font color=#0099ff>1.11e6</font>,或者<font color=#0099ff>11.1e5</font>,<font color=#0099ff>0.0000011</font>可以写成<font color=#0099ff>1.1e-6</font>。负数的话直接在前面加负号即可,例如:<font color=#0099ff>-1.1e-6</font>。
**需要注意的一点是,整数和浮点数在计算机内部存储的方式是不同的,<font color=red>整数</font>之间的运算永远是精确的,而<font color=red>浮点数</font>运算则可能会有四舍五入的误差。**
## 字符串 
字符串是以单引号<font color=#0099ff> ' </font>或双引号<font color=#0099ff> " </font>括起来的任意文本<font color=#0099ff>' '</font>或<font color=#0099ff>" "</font>只是一种表示方式,不是字符串的一部分,所以字符串<font color=#0099ff>'rice'</font>只有<font color=#0099ff>r</font>,<font color=#0099ff>i</font>,<font color=#0099ff>c</font>,<font color=#0099ff>e</font>这4个字符。如果要把<font color=#0099ff>'</font>本身也包括进字符里,那就可以用<font color=#0099ff>" "</font>括起来。如果字符串内部既包含<font color=#0099ff> ' </font>又包含<font color=#0099ff> " </font>怎么办呢?我们可以用转义字符<font color=#0099ff> \ </font>来标识,例如:<font color=#0099ff>'I\'m \"OK\"!'</font>表示的内容为:<font color=#0099ff>I'm "OK"!</font>
转义字符<font color=#0099ff>\</font>可以转义很多字符,比如<font color=#0099ff>\n</font>表示换行,<font color=#0099ff>\t</font>表示制表符,字符\本身也要转义,所以<font color=#0099ff>\\</font>表示的字符就是<font color=#0099ff>\</font>,用print()打印字符串看看结果如何:

基本的数据类型

在Python中,能够直接处理的数据类型有以下几种:

整数

Python可以处理任意大小的整数,包括负整数,写程序的时候表述与数学上的方法一样,例如:99-36666 等等。

浮点数

浮点数也可以称为小数。叫做浮点数是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的。比如,1.11x10611.1x105是完全相等的。对于很大或很小的浮点数,必须用科学计数法表示,把10用e替代,1.11x106就是1.11e6,或者11.1e50.0000011可以写成1.1e-6。负数的话直接在前面加负号即可,例如:-1.1e-6

需要注意的一点是,整数和浮点数在计算机内部存储的方式是不同的,整数之间的运算永远是精确的,而浮点数运算则可能会有四舍五入的误差。

字符串

字符串是以单引号 ' 或双引号 " 括起来的任意文本' '" "只是一种表示方式,不是字符串的一部分,所以字符串'rice'只有rice这4个字符。如果要把'本身也包括进字符里,那就可以用" "括起来。如果字符串内部既包含 ' 又包含 " 怎么办呢?我们可以用转义字符 \ 来标识,例如:'I\'m \"OK\"!'表示的内容为:I'm "OK"!

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\,用print()打印字符串看看结果如何:

In [1]:
print('I\'m \"OK\"!')
I'm "OK"!
In [2]:
print('CHINA SECURITIES is\ngreat')
CHINA SECURITIES is
great
In [3]:
print('\\\t\\')
\	
## 布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有<font color=#0099ff>True</font>、<font color=#0099ff>False</font>两种值。Python中,既可以直接用<font color=#0099ff>True</font>、<font color=#0099ff>False</font>表示(<font color=red>一定要大写</font>),也可以通过布尔运算计算出来:

布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值。Python中,既可以直接用TrueFalse表示(一定要大写),也可以通过布尔运算计算出来:

In [4]:
True
Out[4]:
True
In [5]:
False
Out[5]:
False
In [6]:
1>0
Out[6]:
True
布尔值可以用<font color=#0099ff>and</font>、<font color=#0099ff>or</font>和<font color=#0099ff>not</font>即与、或和非进行运算。

布尔值可以用andornot即与、或和非进行运算。

In [7]:
True and False
Out[7]:
False
In [8]:
1 > 2 or 3 < 10
Out[8]:
True
In [9]:
not 3 < 10
Out[9]:
False
## 列表
Python内嵌的数据类型主要包括以下两类:
### 有序:
List(列表),是有序集合,没有固定大小,可以通过对偏移量以及其他方法修改列表大小。列表的基本形式如:[1,2,3,4]
Tuple(元组),是有序集合,是不可变的,可以进行组合和复制运算后会生成一个新的元组。元组的基本形式比如:(1,3,6,10)
String(字符串),也是有序集合,字符串的基本形式比如:’hello’,这里不进行具体介绍。
### 无序:
Set(集合),是一个无序不重复元素的集。基本功能包括关系运算和消除重复元素。集合的基本形式如:set('abracadabra')
Dictionary(字典)是无序的键:值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。字典的基本形式如:{'jack': 4098, 'sape': 4139}
首先对列表进行介绍。
List(列表) 是 Python 中最通用的序列。列表是一个任意类型对象位置的相关有序集合,它没有固定大小。不像字符串,其大小是可以变的,通过对偏移量进行赋值以及其他各种列表的方法进行调用,可以修改列表大小。
### 索引是从0开始而非1开始!!
列表中值的分割用变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认“0”开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。可以对列表进行索引、切片等操作,看下面例子。

列表

Python内嵌的数据类型主要包括以下两类:

有序:

List(列表),是有序集合,没有固定大小,可以通过对偏移量以及其他方法修改列表大小。列表的基本形式如:[1,2,3,4]

Tuple(元组),是有序集合,是不可变的,可以进行组合和复制运算后会生成一个新的元组。元组的基本形式比如:(1,3,6,10)

String(字符串),也是有序集合,字符串的基本形式比如:’hello’,这里不进行具体介绍。

无序:

Set(集合),是一个无序不重复元素的集。基本功能包括关系运算和消除重复元素。集合的基本形式如:set('abracadabra')

Dictionary(字典)是无序的键:值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。字典的基本形式如:{'jack': 4098, 'sape': 4139} 首先对列表进行介绍。

List(列表) 是 Python 中最通用的序列。列表是一个任意类型对象位置的相关有序集合,它没有固定大小。不像字符串,其大小是可以变的,通过对偏移量进行赋值以及其他各种列表的方法进行调用,可以修改列表大小。

索引是从0开始而非1开始!!

列表中值的分割用变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认“0”开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。可以对列表进行索引、切片等操作,看下面例子。

列出一周5个工作日可以使用list:

列出一周5个工作日可以使用list:

In [10]:
week = ['Monday','Tuesday','Wednesday','Thursday','Friday']
week
Out[10]:
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
week是一个list,可以用len()获取其元素个数:

week是一个list,可以用len()获取其元素个数:

In [11]:
len(week)
Out[11]:
5
可以使用索引来访问list中的每一个位置上的元素,不过一定要记住<font color=red>**索引是从0开始的!!**</font>

可以使用索引来访问list中的每一个位置上的元素,不过一定要记住索引是从0开始的!!

In [12]:
week[0]
Out[12]:
'Monday'
In [13]:
week[3]
Out[13]:
'Thursday'
In [14]:
week[5]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-14-aab97e4d2f9f> in <module>()
----> 1 week[5]

IndexError: list index out of range

当索引超出了范围时,Python会报一个<font color=#0099ff>IndexError</font>错误。由于索引是从<font color=#0099ff>0</font>开始的,最后一个元素的索引是<font color=#0099ff>列表长度 - 1</font>。
python支持从列表最后取元素,如果要取最后一个元素,可以用<font color=#0099ff>-1</font>做索引,直接获取最后一个元素:

当索引超出了范围时,Python会报一个IndexError错误。由于索引是从0开始的,最后一个元素的索引是列表长度 - 1

python支持从列表最后取元素,如果要取最后一个元素,可以用-1做索引,直接获取最后一个元素:

In [15]:
week[-1]
Out[15]:
'Friday'
In [16]:
week[-4]
Out[16]:
'Tuesday'
由于list是一个可变的有序表,所以我们可以往list中追加元素到末尾:

由于list是一个可变的有序表,所以我们可以往list中追加元素到末尾:

In [17]:
week.append('Saturday')
week
Out[17]:
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
还可以吧元素插入到指定的位置,比如索引号为<font color=#0099ff>6</font>的位置:

还可以吧元素插入到指定的位置,比如索引号为6的位置:

In [18]:
week.insert(6,'Sunday')
week
Out[18]:
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
删除list末尾的元素,使用<font color=#0099ff>pop()</font>方法:

删除list末尾的元素,使用pop()方法:

In [19]:
week.pop()
week
Out[19]:
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
删除list中指定位置的元素,使用<font color=#0099ff>pop(i)</font>方法,<font color=#0099ff>i</font>是对应的索引位置:

删除list中指定位置的元素,使用pop(i)方法,i是对应的索引位置:

In [20]:
week.pop(1)
week
Out[20]:
['Monday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
把某个元素替换成别的元素,可以直接赋值给对应的索引位置:

把某个元素替换成别的元素,可以直接赋值给对应的索引位置:

In [21]:
week[0] = 'Tuesday'
week
Out[21]:
['Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
### Python 的列表数据类型包含更多的方法。
<font color=#0099ff>list.append(x)</font> 把一个元素添加到列表的结尾。
<font color=#0099ff>list.extend(L)</font> 将一个给定列表中的所有元素都添加到另一个列表中。
<font color=#0099ff>list.insert(i, x)</font> 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x)。
<font color=#0099ff>list.remove(x)</font> 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
<font color=#0099ff>list.pop([i])</font> 从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop() 返回最后一个元素。元素随即从链表中被删除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,这个经常会在 Python 库参考手册中遇到这样的标记。)
<font color=#0099ff>list.index(x)</font> 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
<font color=#0099ff>list.count(x)</font> 返回 x 在链表中出现的次数。
<font color=#0099ff>list.sort(cmp=None, key=None, reverse=False)</font> 对列表中的元素进行排序(参数可以用来自定义排序方法,参考 sorted() 的更详细的解释)。
<font color=#0099ff>list.reverse()</font> 就地倒排链表中的元素
<font color=#0099ff>del list[i] </font>有个方法可以从列表中按给定的索引而不是值来删除一个子项:del 语句。它不同于有返回值的 pop() 方法。语句 del 还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)。

Python 的列表数据类型包含更多的方法。

list.append(x) 把一个元素添加到列表的结尾。

list.extend(L) 将一个给定列表中的所有元素都添加到另一个列表中。

list.insert(i, x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x)。

list.remove(x) 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。

list.pop([i]) 从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop() 返回最后一个元素。元素随即从链表中被删除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,这个经常会在 Python 库参考手册中遇到这样的标记。)

list.index(x) 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。

list.count(x) 返回 x 在链表中出现的次数。

list.sort(cmp=None, key=None, reverse=False) 对列表中的元素进行排序(参数可以用来自定义排序方法,参考 sorted() 的更详细的解释)。

list.reverse() 就地倒排链表中的元素

del list[i] 有个方法可以从列表中按给定的索引而不是值来删除一个子项:del 语句。它不同于有返回值的 pop() 方法。语句 del 还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)。

## 字典(dictionary)
字典在某些语言中可能称为 联合内存 (associative memories) 或 联合数组 (associative arrays)。序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。如果元组中只包含字符串和数字,它可以作为关键字,如果它直接或间接地包含了可变对象,就不能当做关键字。不能用列表做关键字,因为列表可以用索引、切割或者 append() 和 extend() 等方法改变。
字典是无序的键:值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。使用大括号创建一个空的字典:{}。初始化列表时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。
字典的主要操作是依据键来存储和取值。也可以用 del 来删除键:值对(key:value),从一个不存在的键中取值会导致错误。

字典(dictionary)

字典在某些语言中可能称为 联合内存 (associative memories) 或 联合数组 (associative arrays)。序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。如果元组中只包含字符串和数字,它可以作为关键字,如果它直接或间接地包含了可变对象,就不能当做关键字。不能用列表做关键字,因为列表可以用索引、切割或者 append() 和 extend() 等方法改变。

字典是无序的键:值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。使用大括号创建一个空的字典:{}。初始化列表时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。

字典的主要操作是依据键来存储和取值。也可以用 del 来删除键:值对(key:value),从一个不存在的键中取值会导致错误。

In [22]:
d = {'rice':35, 'wheat':101, 'corn':67}
print(d)
print(d['rice'])
{'corn': 67, 'wheat': 101, 'rice': 35}
35
把数据放入dict还可以直接通过key放入:

把数据放入dict还可以直接通过key放入:

In [23]:
d['egg'] = 33
d
Out[23]:
{'corn': 67, 'egg': 33, 'rice': 35, 'wheat': 101}
一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值冲掉:

一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值冲掉:

In [24]:
d['corn'] = 88
d
Out[24]:
{'corn': 88, 'egg': 33, 'rice': 35, 'wheat': 101}
如果key不存在,dict就会报错。要避免key不存在的错误,有两种办法,一是通过<font color=#0099ff> in </font>判断key是否存在,二是通过dict提供的<font color=#0099ff> get </font>方法,如果key不存在,可以返回None(返回None的时候Python的交互式命令行不显示结果),或者自己指定的value:

如果key不存在,dict就会报错。要避免key不存在的错误,有两种办法,一是通过 in 判断key是否存在,二是通过dict提供的 get 方法,如果key不存在,可以返回None(返回None的时候Python的交互式命令行不显示结果),或者自己指定的value:

In [25]:
d['meat']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-25-d3e7ffd8023e> in <module>()
----> 1 d['meat']

KeyError: 'meat'

In [26]:
'meat' in d
Out[26]:
False
In [27]:
d.get('meat')
In [28]:
d.get('meat',45)
Out[28]:
45
删除一个key,使用<font color=#0099ff>pop(key)</font>方法,对应的value也会从dict中删除:

删除一个key,使用pop(key)方法,对应的value也会从dict中删除:

In [29]:
d.pop('rice')
d
Out[29]:
{'corn': 88, 'egg': 33, 'wheat': 101}
有下面几点需要注意:
1. dict内部存放的顺序和key放入的顺序是没有关系的
2. dict查找和插入的速度极快,不会随着key的增加而增加,但是需要占用大量的内存,内存浪费多
3. dict的key必须是<font color=red>**不可变对象**</font>。字符串、整数等都是不可变的,可以放心地作为key,而list是可变的,就不能作为key:

有下面几点需要注意:

  1. dict内部存放的顺序和key放入的顺序是没有关系的
  2. dict查找和插入的速度极快,不会随着key的增加而增加,但是需要占用大量的内存,内存浪费多
  3. dict的key必须是不可变对象。字符串、整数等都是不可变的,可以放心地作为key,而list是可变的,就不能作为key:
In [30]:
k = [3,4,5]
d[k] = 6
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-725fccd6cc45> in <module>()
      1 k = [3,4,5]
----> 2 d[k] = 6

TypeError: unhashable type: 'list'

### **常见字典操作方法**  
<font color=#0099ff>D.clear()</font> 删除字典内所有元素
<font color=#0099ff>D.copy()</font> 返回一个字典的复制
<font color=#0099ff>D.fromkeys(seq,val)</font> 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
<font color=#0099ff>D.get(key, default=None)</font> 返回指定键的值,如果值不在字典中返回default值
<font color=#0099ff>D.has_key(key)</font> 如果键在字典dict里返回true,否则返回false
<font color=#0099ff>D.items()</font> 以列表返回可遍历的(键, 值) 元组数组
<font color=#0099ff>D.keys()</font> 以列表返回一个字典所有的D.keys()以列表返回一个字典所有的键
<font color=#0099ff>D.setdefault(key, default=None) </font> 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
<font color=#0099ff>D.update(dict2) </font> 把字典dict2的键/值对更新到dict里
<font color=#0099ff>D.values() </font> 以列表返回字典中的所有值
<font color=#0099ff>D.pop(key) </font> 删除一个键并返回它的值,类似于列表的pop,只不过删除的是一个键不是一个可选的位置
<font color=#0099ff>del D[key] </font> 删除键
<font color=#0099ff>D[key] </font> = 42新增或修改键
### 字典用法注意事项:
1. 序列运算无效,字典元素间是没有顺序的概念
2. 对新索引赋值会添加项
3. 键不一定总是字符串

常见字典操作方法

D.clear() 删除字典内所有元素

D.copy() 返回一个字典的复制

D.fromkeys(seq,val) 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

D.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值

D.has_key(key) 如果键在字典dict里返回true,否则返回false

D.items() 以列表返回可遍历的(键, 值) 元组数组

D.keys() 以列表返回一个字典所有的D.keys()以列表返回一个字典所有的键

D.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

D.update(dict2) 把字典dict2的键/值对更新到dict里

D.values() 以列表返回字典中的所有值

D.pop(key) 删除一个键并返回它的值,类似于列表的pop,只不过删除的是一个键不是一个可选的位置

del D[key] 删除键

D[key] = 42新增或修改键

字典用法注意事项:

  1. 序列运算无效,字典元素间是没有顺序的概念

  2. 对新索引赋值会添加项

  3. 键不一定总是字符串

### 多种构造字典方式
<font color=#0099ff>dict()</font> 构造函数可以直接从 key-value 对中创建字典

多种构造字典方式

dict() 构造函数可以直接从 key-value 对中创建字典

In [31]:
dict([('john', 4139), ('mike', 4127), ('lucy', 4098)])
Out[31]:
{'john': 4139, 'lucy': 4098, 'mike': 4127}
In [32]:
dict.fromkeys(['a','b'],0) #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
Out[32]:
{'a': 0, 'b': 0}
In [33]:
dict(zip(['a','b','c'],[1,2,3]))
Out[33]:
{'a': 1, 'b': 2, 'c': 3}
In [34]:
{k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
Out[34]:
{'a': 1, 'b': 2, 'c': 3}
此外,字典推导式可以从任意的键值表达式中创建字典:

此外,字典推导式可以从任意的键值表达式中创建字典:

In [35]:
{x: x**2 for x in (2, 4, 6)}
Out[35]:
{2: 4, 4: 16, 6: 36}
如果关键字都是简单的字符串,有时通过关键字参数指定 key-value 对更为方便:

如果关键字都是简单的字符串,有时通过关键字参数指定 key-value 对更为方便:

In [36]:
D = dict(a=1,b=2,c=3)
D 
Out[36]:
{'a': 1, 'b': 2, 'c': 3}
In [37]:
{c:c*4 for c in 'Zhongxinjiantou'}#默认是集合
Out[37]:
{'Z': 'ZZZZ',
 'a': 'aaaa',
 'g': 'gggg',
 'h': 'hhhh',
 'i': 'iiii',
 'j': 'jjjj',
 'n': 'nnnn',
 'o': 'oooo',
 't': 'tttt',
 'u': 'uuuu',
 'x': 'xxxx'}
In [38]:
{c:c*4 for c in ['Zhongxinjiantou']}
Out[38]:
{'Zhongxinjiantou': 'ZhongxinjiantouZhongxinjiantouZhongxinjiantouZhongxinjiantou'}
In [39]:
{c.lower():c*4+'!' for c in 'Zhongxinjiantou'}
Out[39]:
{'a': 'aaaa!',
 'g': 'gggg!',
 'h': 'hhhh!',
 'i': 'iiii!',
 'j': 'jjjj!',
 'n': 'nnnn!',
 'o': 'oooo!',
 't': 'tttt!',
 'u': 'uuuu!',
 'x': 'xxxx!',
 'z': 'ZZZZ!'}
## 元组(tuple)

元组(tuple)

tuple是另一种有序的数据类型,与list比较类似。主要不同的一点是tuple被创建后就不能对其进行修改。所以,tuple与list不同,没有append(),pop(),insert()这些方法可以使用。获取元素的方法和list是一样的,可以通过索引来访问(也是从0开始的),只不过不能赋值成为其他的元素。
因为tuple不可变,所以代码更安全。如果可以的话,我们尽量使用tuple代替list。
### 创造元组
定义一个空的tuple,使用<font color=#0099ff> () </font>:

tuple是另一种有序的数据类型,与list比较类似。主要不同的一点是tuple被创建后就不能对其进行修改。所以,tuple与list不同,没有append(),pop(),insert()这些方法可以使用。获取元素的方法和list是一样的,可以通过索引来访问(也是从0开始的),只不过不能赋值成为其他的元素。

因为tuple不可变,所以代码更安全。如果可以的话,我们尽量使用tuple代替list。

创造元组

定义一个空的tuple,使用 ()

In [40]:
t = ()
t
Out[40]:
()
只有1个元素的元组在进行定义的时候,需要加一个逗号<font color=#0099ff> **,** </font>来消除歧义,否则定义的就不是一个元组而是元素本身:

只有1个元素的元组在进行定义的时候,需要加一个逗号 , 来消除歧义,否则定义的就不是一个元组而是元素本身:

In [41]:
t = (3)
t
Out[41]:
3
In [42]:
t = (3,)
t
Out[42]:
(3,)
### 元组的连接
如前面所说,元组是不可改的,但是可以连接
可以使用<font color=#0099ff> + </font>对元组进行连接,例如:

元组的连接

如前面所说,元组是不可改的,但是可以连接

可以使用 + 对元组进行连接,例如:

In [43]:
t1 = (2,3,5)
t2 = ('Zhongxinjiantou','python')
t3 = t1 + t2
t3
Out[43]:
(2, 3, 5, 'Zhongxinjiantou', 'python')
### 元组的删除
元组中的元素不能被删除,但是我们可以使用<font color=#0099ff> del </font>删除整个元组,删除后可以重新定义:

元组的删除

元组中的元素不能被删除,但是我们可以使用 del 删除整个元组,删除后可以重新定义:

In [44]:
t4 = ('a',2,'b')
t4
Out[44]:
('a', 2, 'b')
In [45]:
del t4
t4
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-45-00422465996d> in <module>()
      1 del t4
----> 2 t4

NameError: name 't4' is not defined

事实上,上面所说的元素不变是指每个元素的指向永远不变。即指向<font color=#0099ff>1</font>,就不能改成指向<font color=#0099ff>2</font>,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的,例如:

事实上,上面所说的元素不变是指每个元素的指向永远不变。即指向1,就不能改成指向2,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的,例如:

In [46]:
tup = (1,2,[3,4,5])
tup
Out[46]:
(1, 2, [3, 4, 5])
In [47]:
tup[2][0] = 7
tup[2][1] = 11
tup
Out[47]:
(1, 2, [7, 11, 5])
### Python 的元组数据类型包含更多的方法。
<font color=#0099ff>tup.index(x, [start, [stop]]))</font> 返回元组中start到stop索引中第一个值为 x 的元素在整个列表中的索引。如果没有匹配的元素就会返回一个错误。
<font color=#0099ff>tup.count(x)</font> 返回 x 在元组中出现的次数。
<font color=#0099ff>cmp(tuple1, tuple2)</font> 比较元组中两个元素。
<font color=#0099ff>len(tuple)</font> 计算元组元素个数。
<font color=#0099ff>max(tuple)</font> 返回元组中元素最大值。
<font color=#0099ff>min(tuple)</font> 返回元组中元素最小值。
<font color=#0099ff>tuple(seq)</font> 将列表转换为元组。
<font color=red>元组不提供字符串、列表和字典中的方法。</font> 如果相对元组排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用sorted内置方法。

Python 的元组数据类型包含更多的方法。

tup.index(x, [start, [stop]])) 返回元组中start到stop索引中第一个值为 x 的元素在整个列表中的索引。如果没有匹配的元素就会返回一个错误。

tup.count(x) 返回 x 在元组中出现的次数。

cmp(tuple1, tuple2) 比较元组中两个元素。

len(tuple) 计算元组元素个数。

max(tuple) 返回元组中元素最大值。

min(tuple) 返回元组中元素最小值。

tuple(seq) 将列表转换为元组。

元组不提供字符串、列表和字典中的方法。 如果相对元组排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用sorted内置方法。

## 集合(set)
与dict类似,set也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。创建一个set,需要提供一个list作为输入集合:

集合(set)

与dict类似,set也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。创建一个set,需要提供一个list作为输入集合:

In [48]:
s = set([3,4,5])
s
Out[48]:
{3, 4, 5}
重复元素在set中会被自动被过滤,通过<font color=#0099ff>add(key)</font>方法往set中添加元素,重复添加不会有效果,通过<font color=#0099ff>remove(key)</font>方法可以删除元素,例如:

重复元素在set中会被自动被过滤,通过add(key)方法往set中添加元素,重复添加不会有效果,通过remove(key)方法可以删除元素,例如:

In [49]:
s = set([3,3,4,4,5,5,6,6,7])
s
Out[49]:
{3, 4, 5, 6, 7}
In [50]:
s.add(1)
s
Out[50]:
{1, 3, 4, 5, 6, 7}
In [51]:
s.add(1)
s
Out[51]:
{1, 3, 4, 5, 6, 7}
In [52]:
s.remove(5)
s
Out[52]:
{1, 3, 4, 6, 7}
由于set是无序和无重复元素的集合,所以两个set可以做数学意义上的交并集等操作:

由于set是无序和无重复元素的集合,所以两个set可以做数学意义上的交并集等操作:

In [53]:
s1 = set([3,4,5,6])
s2 = set([5,6,7,8,9])
s1 & s2
Out[53]:
{5, 6}
In [54]:
s1 | s2
Out[54]:
{3, 4, 5, 6, 7, 8, 9}
与dict一样,set同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部不会有重复元素。所以把list放入set,会报错。

与dict一样,set同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部不会有重复元素。所以把list放入set,会报错。

In [55]:
s = set([1,2,[1,2]])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-55-806dee2b7dcf> in <module>()
----> 1 s = set([1,2,[1,2]])

TypeError: unhashable type: 'list'

## 总结
总体而言,几种基础数据类型有相似之处,可根据实际应用场景来选择。

总结

总体而言,几种基础数据类型有相似之处,可根据实际应用场景来选择。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多