第二章 数列和序列类型

Posted yunsi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章 数列和序列类型相关的知识,希望对你有一定的参考价值。

 一、Python变量
 1、定义
  学习数据类型之前,先来学习以下什么是python变量?
    直白意思就是给数据起个名字。变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变。
 2、数据类型
  Python有六种数据类型(可划分成数列和序列两种类型):
  - Number(数字)
  - String(字符串)
  - List(列表)
  - Tuple(元组)
  1)变量命名规则:
  - 变量名有字母、数字、下划线组成
  - 数字不能作为开头
  - 不可以使用关键字,如python,re,os这种python自带模块名
  - a a1 a_ a_1
  
  2)变量赋值:
  - 是变量声明和定义的过程
  - a=1
  ```python
//定义正确的变量名
>>> a1=123
>>> a_1=234
>>> _a1=345
>>> 1a=500
  File "<stdin>", line 1
    1a=500
     ^
SyntaxError: invalid syntax
//异常分为多种类型的异常,SytaxError:语法错误,invalid syntax:无效语法,定位到‘1a’,结合变量命名规则得出变量不能以数字开头命名。
// 小案例:定义一个变量,赋值为10
>>>a=10
>>>print(a)
10
```
 二、数列类型
1、数列类型分类
  - Number(数字)为数列类型
  ```python
  //数列类型分为:
  //整数(int)、浮点数(flost)、复数(complex)、布尔(bool)
>>> one=1
>>> type(one)
<class ‘int‘>    //‘int‘:整数型
>>> two=2.2
>>> type(two)  
<class ‘float‘>    //‘float‘:浮点型
>>> three=(1+2j)
>>> type(three)
<class ‘complex‘>    //‘complex‘:复数型
>>> four=(True)
>>> type(four)
<class ‘bool‘>    //‘bool‘:布尔型(True和False)
>>>
  ```
 2、Python变量与内存空间关系
首先,内存空间听上去比较抽象,可以简单理解为有着很多小存物柜的柜子,而小存物柜都贴着标签。而Python中的id就代表各种小存物柜。
  ```python
//不同变量不同数值代表不同内存空间
>>> a=2
>>> b=3
>>> id(a)    id()是python的系统函数,返回对象的内存起始地址。
140723019542816
>>> id(b)
140723019542848
//不同变量相同数值代表同内存空间
>>> d=12
>>> e=12
>>> id(d)
140723019543136
>>> id(e)
140723019543136
>>>5
//同一变量赋值可变
>>> c=123
>>> id(c)
140721953341504
>>> c=345
>>> id(c)
1624836982960
>>> c
345
  ```
在这里,我们简单了解下Python处理数据的方法。在其他语言,如C语言,在定义变量时需要开启一个存放变量的空间。在Python里,先在内存上存储数据后,再通过一个标签去引用数据,这个标签就是变量。
3、数列运算
  - 赋值运算符
  技术图片
   ```python
>>> x=2
>>> x+=3    //即x=2,x=x+3,则x=5
>>> x
5
>>> x-=1    //即x=5,x=x-1,则x=4
>>> x
4
>>> y=3
>>> y*=2    //即y=3,y=y*2,则y=6
>>> y
6
>>> y/=3    //即y=6,y=y/3,则y=2.0
>>> y
2.0
>>> y%=2    //即y=2.0,y=y/2取余数,则y=0.0
>>> y
0.0
  ```
  - 算术运算符
 技术图片

 

 

   ```python
>>> x=3
>>> y=2
>>> x+y
5
>>> x-y
1
>>> x*y
6
>>> x/y
1.5
>>> x//y
1
>>> x%y
1
   ```
  - 关系运算符
 技术图片

 

 

进行关系运算时,输出,如果是正确为True,错误为False。
```python
>>> 1<2
True
>>> 2>3
False
>>> 2==2
True
```
  - 逻辑运算符
  技术图片

 

 

  ```python
>>> True and False
False
>>> True or False
True
>>> not True
False
  ```
- 精确运算和取整运算符   
  ```python
//精确运算,导入decimal模块
>>> import decimal
>>> s=decimal.Decimal(‘2.8‘)
>>> d=decimal.Decimal(‘1.2‘)
>>> s-d
Decimal(‘1.6‘)
//取整运算,导入math模块
>>> import math
>>> a=2.3
>>> math.ceil(a)
3
>>> math.floor(a)
2
>>>
```  
 
三、序列类型
- <span style="color:orangered;font-weight:bold;">请思考123和‘123‘一样吗?
- <span style="color:orangered;font-weight:bold;">请熟记()、[]、{}三种括号
1、数列类型分类
  - String(字符串)
  - List(列表)
  - Tuple(元组)
2、String(字符串)
  字符串定义:用""或者‘‘或者‘‘‘‘‘‘包起来的就是字符串,使用引号定义的一组可以包含数字、字母、符号(非特殊系统符号)的集合。
  
  创建字符串:
  - a=‘Hello world!‘
  - a="Hello world!"
  - a=‘‘‘Hello world!‘‘‘
  - 三重引号通常用来制作字符串,在面向对象时详解。
  ```python
>>> a=‘123‘
>>> type(a)
<class ‘str‘>    //‘str‘代表字符串类型
>>> b=123
>>> a+b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> type(b)
<class ‘int‘>
  ```
上面出现了一个报错TypeError:类型错误,可以看出a变量的数据类型是字符串,b变量的数据类型是整数,所以不同类型的变量不能运算。
  ```python
  >>> say=‘let‘s go‘
  File "<stdin>", line 1
    say=‘let‘s go‘
             ^
SyntaxError: invalid syntax
  ```
上面出现的报错SyntaxError:语法错误,字符串引号是一对存在的,如果字符串里定义了单引号,那么,字符串引号应该用双引号或三引号。
  ```python
  >>> say=‘let‘s go‘    //还可以通过(反斜杠:转义字符)保留单引号不被转义
>>> say
"let‘s go"
  ```
对于该论述,欢迎读者查阅文章,[转义字符](https://baike.baidu.com/item/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6/86397?fr=aladdin)
3、List(列表)
  列表定义:list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目
  - 列表是可变类型的数据
  - 列表的组成:用[]表示列表,包含了多个以逗号隔开的数字或字符串。
  
  创建列表:
  - list1=[‘Tom‘,‘Jim‘,‘张三‘,‘李四‘]
  - list2=[1,2,3,4,5]
  - list3=[‘str1‘,‘str3‘,‘str5‘]
  ```python
>>>t=[]    //一个空的列表由一对空的中括号组成
>>> type(t)
<class ‘list‘>
>>> t=[1,2,3,‘hello‘]    //一般的列表
>>> type(t)
<class ‘list‘>
   ```  
 4、Tuple(元组)
  元组定义:元组和列表十分类似,只不过元组和字符串一样是不可变即你不能修改元组。
  - 元组通过圆括号中用逗号分割的项目定义。
  - 元组通常用在使语句或用户定义的函数能够安全地采用一组值得时候,即被使用得元组得值不会改变。
  
  创建元组:
  ```python
>>> x=()    //一个空的元组由一对空的圆括号组成
>>> type(x)
<class ‘tuple‘>
>>> y=(12,)    //含有单个元素的元组
>>> type(y)
<class ‘tuple‘>    
>>> t=(‘hello‘,123,‘world‘)    //一般的元组
>>> type(t)
<class ‘tuple‘>
```
 
 四、序列相互转换
 1、列表转字符串、元组
```python  
>>> li=[1,2,3,‘人‘,‘生‘,‘苦‘,‘短‘]
>>> sli=str(li)
>>> sli
"[1, 2, 3, ‘人‘, ‘生‘, ‘苦‘, ‘短‘]"
>>> tli=tuple(li)
>>> tli
(1, 2, 3, ‘人‘, ‘生‘, ‘苦‘, ‘短‘)
```
2、字符串转列表、元组
```python  
>>> s=‘人生苦短,I love python!‘
>>> ls=list(s)
>>> ls
[‘人‘, ‘生‘, ‘苦‘, ‘短‘, ‘,‘, ‘I‘, ‘ ‘, ‘l‘, ‘o‘, ‘v‘, ‘e‘, ‘ ‘, ‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘, ‘!‘]
>>> ts=tuple(s)
>>> ts
(‘人‘, ‘生‘, ‘苦‘, ‘短‘, ‘,‘, ‘I‘, ‘ ‘, ‘l‘, ‘o‘, ‘v‘, ‘e‘, ‘ ‘, ‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘, ‘!‘)
```  
3、元组转字符串、列表
```python
>>> tu=(1, 2, 3, ‘人‘, ‘生‘, ‘苦‘, ‘短‘)
>>> stu=str(tu)
>>> stu
"(1, 2, 3, ‘人‘, ‘生‘, ‘苦‘, ‘短‘)"
>>> ltu=list(tu)
>>> ltu
[1, 2, 3, ‘人‘, ‘生‘, ‘苦‘, ‘短‘]
```  
  总结:可以看出,list、tuple转str类型都是在外侧强制加上字符串的标志(‘’/‘‘ ‘‘/‘‘‘ ‘‘‘),list、tuple类型相互转时内容基本不会变化,只是改为各自的标志(list[]、tuple()),这些都好理解,但需要注意的是,str转list或tuple时,str的内容会被拆解,这有时候并不符合我们的预期,所以可以用下面的方法:
```python  
>>> s=‘人生苦短,I love python!‘
>>> ls=s.split()    #利用str的split方法,分割成list类型。更多序列方法可看下一章《序列的方法》
>>> ls
[‘人生苦短,I‘, ‘love‘, ‘python!‘]
```  
还有list或者tuple转str的时候,所得的结果貌似也不太符合我们的预期,所以,可以这样:
```python  
>>> li=[‘人‘,‘生‘,‘苦‘,‘短‘]
>>> ‘‘.join(li)
‘人生苦短‘
```
  利用str的join方法,将list加入到str中,tuple同样适用。
五、课堂练习
  - 1、创建一个变量,并给它赋一个数值(任何数值都行),然后使用print显示这个变量。
  - 2、改变这个变量,可以用一个新值替换原来的值,或者将原来的值增加某个量,使用print显示这个新值。
  - 3、创建另一个变量,并赋给它一个字符串(‘某个文本‘),然后使用print显示这个变量。
  - 4、将第三题的变量转换为列表形式和元组形式。
  
注释:答案请查看下一章节《序列的方法》
  
  

以上是关于第二章 数列和序列类型的主要内容,如果未能解决你的问题,请参考以下文章

第二题等差素数列

算法第二章上机实践报告

[CodeForces10D]LCIS(最长公共上升子序列) - DP

第二章 序列构成的数组

最大连续子数列和

第二章数据整理与描述-统计学-上海立信会计金融学院MOOC