Python基础-数据类型

Python基础-数据类型

Python中有6中标准的数据类型

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Turple(元组)
  • Set(集合)
  • Dictionary(字典)

不可变的数据(3个): Number、String、Turple

可变的数据(3个):List、Set、Dictionary

数字类型

数字类型的分类

在Python中支持int、float、bool、complex(复数)

数字类型的运算规则

数学运算中的加、减、乘、除、取模、乘方等

# 加法
>>> 3+2
5
# 减法
>>> 3-2
1
# 乘法
>>> 3*2
6
# 除法
>>> 3/2
1.5
# 取整除法
>>> 3//2
1
# 乘方
>>> 3**2
9
# 取模
>>> 12 % 7
5

注意 Python数值的除法包含两个运算符: / 返回一个浮点数, // 返回是一个整数

字符串类型

字符串的表示

Python中字符串的形式有多种, 可以使用单引号('...'),双引号("..."),同时可以使用反斜杠\来转义特殊字符。

>>> 'hello'
'hello'
>>> "hello"
'hello'
>>> 'doesn\'t'
"doesn't"
字符串的拼接和复制

加号+是字符串的连接符,星号*表示复制当前字符串,与之结合的数字表示复制的次数。

>>> 'hello' + ' world' + '!'
'hello world!'
>>> 'hello' * 2
'hellohello'
字符串的切片

字符串是可以被索引下标访问的,第一个字符索引是0,单个字符并没有的类型, 只是长度为一的字符串。

字符串截取的语法格式:

变量[头下标:尾下标]

注意: 索引值是以0为开始值, -1为从末尾开始的位置

>>> word = 'Python'
>>> word[0]
'P'
>>> word[5]
'n'
>>> word[-1]
'n'
>>> word[-5]
'y'
>>> word[-6]
'P'

字符串索引可以得到单个字符, 而字符串切片可以得到子字符串。

>>> word = 'Python'
>>> word[0:2]
'Py'
>>> word[2:5]
'tho'

切片索引有默认值,省略开始索引时, 默认为0,省略结束索引时默认到字符串的结束。

>>> word = 'Python'
>>> word[:2]
'Py'
>>> word[4:]
'on'
>>> word[-2:]
'on'

可以这么理解切片:将索引视为指向字符之间的,第一个字符的左侧标为0,最后一个字符的右侧标为n,n是字符串的长度。例如

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

对于非负索引的切片,如果索引不越界, 那么切片的长度就是起止索引之差, 如word[1:3]的长度为2。

试图使用过大索引会产生一个错误

>>> word = 'Python'
>>> word[32]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

但是切片中索引越界,会被自动处理

>>> word = 'Python'
>>> word[4:42]
'on'
>>> word[:42]
'Python'

Python中的字符串是不能被修改的,它们是immutable的。因此,向字符串索引的某个位置赋值会产生一个错误

>>> word = 'Python'
>>> word[0] = 'J'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

总结:

  • 反斜杠\用来表示转义, 可以使用r让反斜杠不转义
  • 字符串可以用+连接在一起,用*运算符重复
  • Python字符串中有两种索引方式:一种从左往右从0开始,一种是从右往左从-1开始
  • Python中的字符串不能被改变

列表类型

列表可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。

列表的创建

创建一个列表, 只要逗号分隔不同的数据项使用方括号括起来即可。

>>> squares = [1, 4, 9, 16]
>>> squares
[1, 4, 9, 16]
列表的操作

索引、切片、迭代、长度、运算(加、乘)*、检查成员

和字符串一样, 列表也支持索引和切片

>>> squares[0]
1
>>> squares[-1]
16
>>> squares[-3:]
[4, 9, 16]

所有切片操作都返回一个包含所请求元素的新列表。这意味着以下切片操作都会返回列表的一个浅拷贝:

>>>squares[:]
[1, 4, 9, 16]

列表同样支持拼接操作:

>>> squares + [25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

与immutable的字符串不同, 列表是一个mutable类型, 就是说,它自己的内容可以改变:

>>> cubes = [1, 8, 27, 65, 125]
>>> cubes[3] = 64
>>> cubes
[1, 8, 27, 64, 125]

给切片赋值也是可以的,甚至可以改变列表大小, 或者把列表整个清空:

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]

内置函数len()可以作用到列表上,计算列表的长度

>>> letters = ['a', 'b', 'c', 'd']
>>> len(letters)
4

列表的+*的操作符和字符串相似。+用于组合列表, * 用于重复列表。

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> ['hi'] * 4
['hi', 'hi', 'hi', 'hi']

列表检查成员的关键词innot in

>>> # 元素存在于列表中
>>> 3 in [1, 2, 3]
True
>>> # 元素不存在于列表中
>>> 1 not in [1, 2, 3]
False

列表的迭代操作for x in y

>>> for x in [1, 2, 3]:
...     print(x)
...
1
2
3

元组类型

Python的元组与列表类似, 不同之处在于元组的元素不能被修改。

元组使用小括号, 列表使用方括号。

元组的创建

元组的创建很简单, 只需要在括号中添加元素,并使用逗号隔开即可

>>> t = 12345, 54321, 'hello!'
>>> t
(12345, 54321, 'hello!')
>>> t1 = ('java', 'php', 'python')
>>> t1
('java', 'php', 'python')
>>> # 创建空元组
>>> t2 = ()
>>> t2
()
>>> # 类型判断
>>> type(t2)
<class 'tuple'>

注意:元组中只包含一个元素时, 需要在元素后添加逗号, 否则括号会被当做运算符使用

>>> t3 = (50)
>>> type(t3)
<class 'int'>

>>> t4 = (50,)
>>> type(t4)
<class 'tuple'>
元组的操作

索引、切片、迭代、长度、运算(加、乘)*、检查成员

元组与字符串类似, 下标索引从0开始, 可以截取、组合等

>>> t = 12345, 54321, 'hello'
>>> t[0]
12345
>>> t[-1]
'hello'

元组是immutable类型, 对元组赋值操作,会产生错误

>>> t = 12345, 54321, 'hello'
>>> t[0] = 'world'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

元组和列表类似, 是可以切片和截取的

>>> a = (1, 2, 3, 4, 5, 6)
>>> a[2:]
(3, 4, 5, 6)
>>> a[:3]
(1, 2, 3)

内置函数len()可以作用在元组上, 计算元组元素的个数

>>> a = (1, 2, 3, 4, 5, 6)
>>> len(a)
6

元组的+*和字符串类型, +用于组合元组,*用于重复列表

>>> (1,2,3)+(4, 5, 6,)
(1, 2, 3, 4, 5, 6)
>>> (1, 2, 3) * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)

元组检查成员的关键词innot in

>>> 1 in (1,2,3,)
True
>>> 1 not in (1, 2, 3,)
False

元组的迭代

>>> for x in (1, 2, 3,):
...     print(x)
...
1
2
3

集合类型

集合是一个无序的不重复元素序列。

可以用花括号{}set()函数来创建集合。

注意:要创建一个空集合,只能使用set()而不能使用{},因为花括号{}是创建一个空字典

集合创建

创建格式:

param = {value1, value2, ...}
或
set(value)
>>> # 集合是无序得不重复的
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> basket
{'orange', 'pear', 'banana', 'apple'}
>>> # set函数创建集合
>>> a = set('abracadabra')
>>> a
{'a', 'c', 'r', 'd', 'b'}
>>> # 集合推导式创建
>>> b = {x for x in 'abracadabra' if x not in 'abc'}
>>> b
{'d', 'r'}
集合操作

添加元素、移除元素、计算集合元素个数、清空集合、检查集合元素成员

添加元素的格式如下:

s.add(x)

添加集合元素即将元素添加到集合中, 如果元素已存在, 则不进行任何操作。示例如下:

>>> a = set('abracadabra')
>>> a
{'a', 'c', 'r', 'd', 'b'}
>>> # 添加一个不存在的集合元素
>>> a.add('e')
>>> a
{'a', 'e', 'c', 'r', 'd', 'b'}
>>> # 添加一个已存在的集合元素
>>> a.add('a')
>>> a
{'a', 'e', 'c', 'r', 'd', 'b'}

还有一个方法,也可以添加元素,且参数可以是列表、元组、字典等, 语法如下:

s.update(x)

x可以有多个, 用逗号,隔开。

>>> numbers = {1, 2, 3, 4 }
>>> numbers
{1, 2, 3, 4}
>>> type(numbers)
<class 'set'>
>>> numbers.update({'a', 'b'})
>>> numbers
{'a', 1, 2, 3, 4, 'b'}
>>> numbers.update(('apple', 'banana',), [6, 7, 8])
>>> numbers
{1, 2, 3, 4, 6, 7, 8, 'b', 'banana', 'a', 'apple'}

移除元素

语法格式如下:

s.remove(x)

将元素x从集合中移除, 如果元素不存在, 则会发生错误。

>>> numbers = {1, 2, 3, 4, 6, 7, 8, 'b', 'banana', 'a', 'apple'}
>>> numbers
{1, 2, 3, 4, 6, 7, 8, 'b', 'banana', 'a', 'apple'}
>>> numbers.remove(1)
>>> numbers
{2, 3, 4, 6, 7, 8, 'b', 'banana', 'a', 'apple'}
>>> numbers.remove('haha')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'haha'

此外还有一个方法也是可以移除集合中的元素, 且如果集合元素不存,不会发送错误, 格式如下:

s.discard(x)

>>> numbers = {2, 3, 4, 6, 7, 8, 'b', 'banana', 'a', 'apple'}
>>> numbers
{2, 3, 4, 6, 7, 8, 'b', 'banana', 'a', 'apple'}
>>> numbers.discard('haha')
>>> numbers
{2, 3, 4, 6, 7, 8, 'b', 'banana', 'a', 'apple'}

也可以设置随机删除集合中的一个元素,语法格式如下:

s.pop()

thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
>>> x = thisset.pop()
>>> print(x)
Taobao
>>> thisset
{'Runoob', 'Facebook', 'Google'}
>>> thisset.pop()
'Runoob'

计算集合的元素格式

语法格式如下:

len(s)

>>> a = {1, 2, 3, 4}
>>> len(a)
4

清空集合

语法格式如下:

s.clear()

>>> a = {1, 2, 3, 4}
>>> a.clear()
>>> a
set()

检查集合成员是否存在

语法格式如下

x in s

x not in s

判断元素下是否存在集合中, 存在返回True, 不存在返回False。示例如下:

>>> a = {1, 2, 3, 4}
>>> 1 in a
True
>>> 1 not in a
False

字典类型

字典是以关键字为索引, 关键字可以是任意不可变类型,通常是字符串或是数字。如果一个元组中只包含字符串、数字或元组, 那么这个元组也可以用作关键字, 但如果元组直接或间接地包含了可变对象,那么它就不能作为关键字。列表不能作为关键字, 因为列表可以通过索引、切片或者append()extend()之类地方法来改变。

理解字典地最好方式,就是将它看做是一个键值对地集合, 键必须是唯一地(在一个字典中)。字典的每个键值key => value对用冒号:分隔, 每个键值对之间用逗号,分割, 整个字典包括在花括号{}中, 格式如下:

d = {key1 : value1, key2 : value2}
字典的创建

创建一个字典, 只要用逗号分隔每个键值对, 每个键值之间用冒号分隔, 使用花括号括起来即可

>>> tel = {'jack': 4098, 'sape':4139}
>>> a = {}
>>> a
{}
>>> # 字典推导式创建字典
>>> {x: x**2 for x in (2, 4, 6)}
>>> {2: 4, 4: 16, 6: 36}
>>> # 当关键字是简单字符串时,有时可以直接通过关键字参数来指定键值对
>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}
字典的操作

访问、修改、删除、检查成员、迭代

访问字典,即把相应的键放入到方括号中,如下

>>> tel = {'jack': 4098, 'sape':4139}
>>> tel['jack']
4098

若访问字典中不存在的键, 则会产生一个错误:

>>> tel['lili']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'lili'

向字典中添加新内容的方法是增加新的键值对, 或者修改或删除已有的键值对,示例如下

>>> tel = {'jack': 4098, 'sape':4139}
>>> tel
{'jack': 4098, 'sape': 4139}
>>> tel['jack'] = 4099
>>> tel
{'jack': 4099, 'sape': 4139}
>>> tel['lucy'] = 4210
>>> tel
{'jack': 4099, 'sape': 4139, 'lucy': 4210}

能删单一元素的字典也能清空字典,清空只需一项操作。显式删除一个字典用del命令, 示例如下:

>>> # 删除单一元素
>>> del tel['jack']
>>> tel
{'sape': 4139, 'lucy': 4210}
>>> # 删除字典
>>> del tel
>>> # 清空字典
>>> dic = {'jack': 4039, 'sape': 4139}
>>> dic.clear()
>>> dic
{}

检查成员是否存在的关键字innot in

>>> tel = {'jack': 4039, 'sape':4139}
>>> 'jack' in tel
True
>>> 'jack' not in tel
False

当在字典中循环时, 用items()方法可以将关键字和对应得值同时取出

>>> tel = {'jack': 4039, 'sape':4139}
>>> for k, v in tel.items():
...     print(k, v)
...
jack 4039
sape 4139

当在序列中循环时, 用enumerate()函数可以将索引位置和其对应得值同时去除

>>> for i, v in enumerate(['tic', 'toe', 'tac']):
...     print(i, v)
...
0 tic
1 toe
2 tac
posted @ 2020-10-12 11:19  phper-liunian  阅读(243)  评论(0编辑  收藏  举报