Python基础知识——数据类型详解

数据类型详解

数字:

int(整型):

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型):

Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大
自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果

float(浮点型):

浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

complex(复数):

复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

布尔值:

0:False,假
1:True,真

字符串:

特性:无法修改,字符串一旦定义即无法对其进行修改,仅可以重新定义字符串

格式化输出:参阅Python基础知识一

字符串方法:(中括号内表示可选参数)

第一类:判断类

isalnum():如果字符串至少有一个字符并且所有字符都是字母或者数字则返回True,否则False
isalpha():如果字符串至少有一个字符且所有字符都是字母则返回True,否则False
isdecimal():如果字符串只包含十进制数字则返回True,否则False
isdigit():如果字符串只包含数字则返回True,否则False
islower():如果字符串至少包含一个区分大小写的字符,且都是小写,则返回True,否则False
isnumeric():如果字符串只包含数字,则返回True,否则False
isspace():如果字符串只包含空格,返回True,否则False
istitle():如果字符串是标题化(所有单词都是以大写开始,其余字母均小写),则返回True,否则False
isupper():如果字符串至少包含一个区分大小写的字符,且都是大写,则返回True,否则False
endswith(sub[, start[, end]]):检查字符串是否以sub子串结尾,是则返回True,否则返回False,start和end表示字符串可选范围
startswith(prefix[, start[, end]]):检查字符串是否以prefix开头,是则返回True,否则False

第二类:检索类

find(sub[, start[, end]]):检测sub是否在字符串中,如果有则返回索引值,没有则返回-1
index(sub[, start[, end]]):方法同find,但若子串不存在会返回异常
rfind(sub[, start[, end]]):同find(),从右侧开始查找
rindex(sub[, start[, end]]):同index(),从右侧开始
partition(sub):找到子字符串sub,把字符串分成一个三元组(pre_sub, sub, fol_sub),如果不包含sub则返回(‘原字符串’,‘’,‘’)
rpartition(sub):同partition(),从右侧开始
count(sub[, start[, end]]):返回sub在字符串里出现的次数,start和end表示统计的范围
replace(old, new[, count]):把字符串中的old子字符串替换成new,如果count指定,则替换不超过count次

第三类:格式化类

title():返回标题化的字符
swapcase():反转字符串中的大小写
capitalize():把字符串第一个字符改为大写
casefold():把整个字符串的所有字符改为小写
upper():转换所有小写字符为大写
lower():将字符串中的大写字符变成小写
center(width):用空格将字符串扩展至width长,且将字符串居中
ljust(width):用空格将字符串扩展至width长,且将字符串左对齐
rjust(width):用空格将字符串扩展至width长,且将字符串右对齐
zfile(width):返回长度为width的字符串,原字符串右对齐,前面用0填充
encode(encoding='utf-8',errors='strict'):以encoding指定的编码格式对字符串进行编码
expandtabs([tabsize=8]):将字符串的tab转换为空格,默认为八个空格
join(sub):以字符串作为分隔符,插入到sub中的所有字符之间
lstrip():去掉字符串左边所有空格
rstrip():删除字符串末尾的空格
strip([chars]):删除字符串前后所有空格,chars可以定制删除的字符

第四类:切片类

split(sep=None, maxsplit=-1):不带参数默认以空格为分隔符切片字符串,如果maxsplit参数有设置,则仅分割maxsplit个子字符串,返回切片后的子字符串拼接成的列表
splitlines([keepends]):以‘\n’分割, 返回一个包含各行作为元素的列表,如果keepends参数指定,则返回前keepends行

列表:

`
>>> a=[]#新建空列表
>>> a
[]
>>> a.append('one')#为列表追加元素
>>> a
['one']
>>> b = ['1', '2', '3','4', '5']
>>> a.extend(b)#列表扩展及合并
>>> a
['one', '1', '2', '3', '4', '5']
>>> c = a[:]#切片拷贝
>>> c
['one', '1', '2', '3', '4', '5']
>>> d = a.copy()#列表直接拷贝
>>> d
['one', '1', '2', '3', '4', '5']
>>> a[1:4]#切片截取列表元素
['1', '2', '3']
>>> a.insert(2,'one')#插入元素,插在指定位置的前面
>>> a
['one', '1', 'one', '2', '3', '4', '5']
>>> a[4]='one'#直接修改列表里的元素
>>> a
['one', '1', 'one', '2', 'one', '4', '5']
>>> a.count('one')#统计列表内的某个元素的个数
3
>>> a.index('one', 1, 6)#返回列表内元素的索引值,后两个可选参数划定查找范围
2
>>> a.pop()#删除列表最后一个元素并返回该元素
'5'
>>> a
['one', '1', 'one', '2', 'one', '4']
>>> a.remove('one')#删除元素,只能删除从前数第一个
>>> a
['1', 'one', '2', 'one', '4']
>>> del a[1]#删除指定位置元素
>>> a
['1', '2', 'one', '4']
>>> a.reverse()#列表元素逆排序
>>> a
['4', 'one', '2', '1']
>>> a.sort()#列表元素正排序
>>> a
['1', '2', '4', 'one']
>>> a.sort(reverse=True)#逆排序
>>> a
['one', '4', '2', '1']
>>> a.clear()#清空列表,使列表变成空列表
>>> a
[]
`

列表方法:

list.append(object):追加元素
list.extend(iterable):追加合并列表
list.copy():复制列表
list.insert(index, object):在index位置前插入object
list.count(value):统计value在列表中出现的次数
list.index(value, [start, [stop]]):在start和stop中返回第一个value的索引值
list.pop([index]):删除索引位置为index的元素,默认删除最后一个
list.remove(value):删除元素value
list.sort(key=None, reverse=False):排序,若reverse为True则逆排
list.reverse():逆排序
list.clear():清空列表,列表清空后还是列表

列表推导式:

>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]

等价于:

list1 = []
for x in range(10):
    for y in range(10):
      if x%2 == 0:
         if y%2 != 0:
               list1.append((x, y))

元组:

`
>>> a = ()#创建空元组
>>> type(a)
<class 'tuple'>
>>> a = (1)
>>> type(a)
<class 'int'>
>>> a = (1,)#创建有一个元素的元组,一定要加上逗号
>>> type(a)
<class 'tuple'>
`

元组只有index()和count()两种方法,意味着元组里的内容不可以随便改变,又被称为被束缚的列表。

字典:

字典特性:

- 有大括号标志且元素都有映射关系的数据类型,叫做字典
- 字典不是序列类型,字典是映射类型,列表和元组都是序列类型
- 字典元素无序,没有排序和索引功能
- 字典的Key值唯一,如果出现重复的会自动去重

字典基本操作:

定义|拷贝:

`
方法一:
    #通过定义根据大括号以及映射关系创建,如没有映射关系则会被定义成集合
    >>> a = {}
    >>> type(a)
    <class 'dict'>

    >>> a = {2:'b', 1:'a', 3:'c'}
    >>> a
    {2: 'b', 1: 'a', 3: 'c'}
    >>> type(a)
    <class 'dict'>

方法二:
    #fromkeys方法可以形成一个新的字典,注意两个参数不会智能的一一赋值,而是将第二个参数全部作为值来对应所有的键
    >>> a = {}
    >>> a = a.fromkeys((1, 2, 3))
    >>> a
    {1: None, 2: None, 3: None}

    >>> a
    {}
    >>> a.fromkeys(('1', '2', '3'), (1, 2, 3))
    {'1': (1, 2, 3), '2': (1, 2, 3), '3': (1, 2, 3)}

方法三:
    #字典浅拷贝
    >>> a
    {'1': 'b', '2': None, '3': 'c'}
    >>> b = a.copy()
    >>> b
    {'1': 'b', '2': None, '3': 'c'}     
`

添加|修改:

`
方法一:
    #直接对字典中键的值进行修改,如果没有该键则会创建
    >>> a = {}
    >>> a['1'] = 'a'
    >>> a
    {'1': 'a'}
    >>> a['1'] = 'b'
    >>> a
    {'1': 'b'}

方法二:
    #setdefault方法为字典添加新的键和值,不会对已经存在的键的值进行修改
    >>> a.setdefault('2')
    >>> a
    {'1': 'b', '2': None}
    >>> a.setdefault('2','b')
    >>> a
    {'1': 'b', '2': None}
    >>> a.setdefault('3', 'c')
    'c'
    >>> a
    {'1': 'b', '2': None, '3': 'c'}
    >>> a.setdefault('1')
    'b'

方法三:
    #用一个字典更新另一个字典,键值相同的不修改,键相同值不同的修改值,键不同的直接创建新的键值
    >>> a
    {'1': 'b', '2': None, '3': 'c'}
    >>> b = {'2':'a', '4':'d'}
    >>> a.update(b)
    >>> a
    {'1': 'b', '2': 'a', '3': 'c', '4': 'd'}
`

删除:

`
方法一:
    #pop方法弹出指定键对应的元素并返回,如果该键不存在,则返回第二个参数
    >>> a
    {'1': 'b', '2': 'a', '3': 'c', '4': 'd'}
    >>> a.pop('1')
    'b'
    >>> a
    {'2': 'a', '3': 'c', '4': 'd'}
    >>> a.pop('1', 'a')
    'a'

方法二:
    #popitem方法随机删除字典中的元素
    >>> a
    {'3': 'c', '4': 'd', '1': 'a'}
    >>> a.popitem()
    ('1', 'a')
    >>> a
    {'3': 'c', '4': 'd'}

方法三:
    #清空字典
    >>> a
    {'3': 'c', '4': 'd'}
    >>> a.clear()
    >>> a
    {}

`

查询:

`
#根据键查询并返回值,如果键不存在方法一会报错,而方法二不会,且不修改字典中的值
方法一:
    >>> a
    {'2': 'a', '4': 'd', '5': 'e', '1': 'c'}
    >>> a['1']
    'c'
    >>> a['3']
    Traceback (most recent call last):
    File "<pyshell#401>", line 1, in <module>
        a['3']
    KeyError: '3'

方法二:
    >>> a
    {'2': 'a', '4': 'd', '5': 'e', '1': 'c'}
    >>> a.get('1')
    'c'
    >>> a.get('3')
    >>> a
    {'2': 'a', '4': 'd', '5': 'e', '1': 'c'}
`

其他操作:

`
>>> a
{'2': 'a', '4': 'd', '5': 'e', '1': 'c'}
>>> a.keys()
dict_keys(['2', '4', '5', '1'])
>>> a.values()
dict_values(['a', 'd', 'e', 'c'])
>>> a.items()
dict_items([('2', 'a'), ('4', 'd'), ('5', 'e'), ('1', 'c')])

循环输出:
    >>> for i in a.keys():
    print(i)


    2
    4
    5
    1
`

集合:

- 以大括号标志且其中元素没有映射关系则为集合
- 同字典相同,无排序和索引功能,且可自动去重
- 与数学中的集合同义,能进行集合运算

集合的操作:

>>> a = {1, 2, 3, 4}#定义
>>> b = set([2, 3, 4, 5, 6, 7])#通过工厂函数定义
>>> a
{1, 2, 3, 4}
>>> b
{2, 3, 4, 5, 6, 7}

>>> a | b #a 和 b的并集
{1, 2, 3, 4, 5, 6, 7}
>>> a & b #a 和 b的交集
{2, 3, 4}
>>> a - b #求差集(项在a中,但不在b中)
{1}
>>> a ^ b #对称差集(项在a或b中,但不会同时出现在二者中)
{1, 5, 6, 7}

>>> a.add(5)#添加一个元素
>>> a
{1, 2, 3, 4, 5}
>>> b.update([1,2,3])#添加多个元素
>>> b
{1, 2, 3, 4, 5, 6, 7}
>>> a.remove(5)#删除某个元素
>>> a
{1, 2, 3, 4}
>>> c = a.copy()#集合浅复制
>>> c
{1, 2, 3, 4}

>>> a
{1, 2, 3, 4}
>>> b
{1, 2, 3, 4, 5, 6, 7}
>>> a.issubset(b)#判断a是否为b的子集
True
>>> a.issuperset(b)#判断b是否为a的子集
False

a.union(b)                  等价于 a | b 
a.intersection(b)           等价于 a & b  
a.difference(b)             等价于 a - b  
a.symmetric_difference(b)   等价于 a ^ b   

注:

- 工厂函数:int(), long(), str(), list(), cuple()等这些以变量类型为名的函数统称为工厂函数,这些函数可以对变量进行强制转换,以及定义各个类型的变量等

- 复制操作:copy函数为另外创建一个变量,而直接对变量名进行赋值仅仅是增加了指向该变量所处内存的指针,内存内容发生变化,则指针对应的值都会变化
posted @ 2018-03-07 08:49  Clingyu  阅读(117)  评论(0)    收藏  举报