python支持的基本数据类型及其简单操作

      python是属于弱类型语言,在定义数据类型之前,不须要先声明数据类型。相对应的在强类型语言中(比如c、java等),如果在定义数据之前,没有声明数据类型这回报错。

  python3 中,所指的数据类型,并非变量的,而是变量所指内存地址中储存的数据的基本类型。有Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典),可以分为两大类:

      不可变数据类型:Number(数字)、String(字符串)、Tuple(元组)

      可变数据类型:List(列表)、Set(集合)、Dictionary(字典)

 

数据类型

语法格式

基本操作(增删改查)

 

增加/改动

删除

查找

其他常用函数或方法

Number

(数字)

python3支持 int、float、bool、complex(复数)

在pyhotn2.x中,还有长整形long

不可变    

type();

isinstance();

数学函数类;
int();

float();

real();

String

(字符串)
。序列

字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。

不可变

del;

count();
capitalize();
center();
find();
index();

str();
copy();


strip(),lstrip(),rstrip();
format();format_map(d);


startwith();endwith();
isalnum();isalpha();
isdigit();isspace();
islower();isupper();istitle();


replace();
split();
join();
swapcase();capitalize();

casefold()

zfill() ; rjust(); ljust();

Booleans

布尔值

True;

False。

       

List

(列表)。序列

列表是写在方括号 [] 之间、用逗号分隔开的元素列表。列表可以嵌套

append();
insert();

list1+list2;
extend();

del;

pop;

remove;

clear;

li1[3];

index(‘abc’)

count(‘abc’)

in;

list();
cmp();
len();max();min();
sort();reverse();

Tuple

(元组)。序列

不可变列表,只可访问

 

del;

tup1[0];

index();

count()

in

tuple();
count();
cmp();
len();max();min();

Dictionary

(字典)

字典是python中唯一的映射类型数据,key=>value,其中key值必须是不可变数据类型,并且唯一。形式储存数据,用{}包括内容

dic1["m"] = "add";
dic1.update(dic2)

dic1.setdefault("k",'v')

clear;

pop;

del;

popitem

dic1["m"]

dic1.get()

dic1.keys()

dic1.values()

dic1.items()

 

type();len();cmp();
copy();fromkeys()
len();
has_key();

keys();values();items();
get();setdefault();
iterkeys();itervalues();

iteritems();

Set

(集合)

1.不同元素组成

2.无序

3.集合中的元素必须是不可变类型。
4,{}

add();update();

remove();

discard();

pop();

clear();

 

issuperset();issubset();
isdisjoint();

intersection();union();

difference();

symmetric_diference()

 

      其他需要注意的要点:

      Number(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)Set(集合)数据类型扩展

      深浅copy与赋值

      python基本数据类型中,列表、元组、字符串属于序列,序列都可以进行的操作包括索引,切片,加,乘,检查成员。

      Number(数字):

  python3支持 int、float、bool、complex(复数),在pyhotn2.x中,还有长整形long    

      String(字符串):

      Python 使用反斜杠(\)转义特殊字符,如果不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串。另外,反斜杠(\)可以作为续行符,表示下一行是上一行的延续。字符串连接中,除了可以用join()方法,还可以用  +  运算符连接在一起,此外用  *  运算符重复。

  三引号,‘’‘ ’‘’ 或者 “”“  ”“” ,可以实现字符串的多行定义、格式化输出等

      ‘’或者“”表示的是空字符串,判断的时候,对于任意的字符串,空字符串都在里面。即如果用in来判断的时候,空字符串in任意的字符串,结果都是True

      注意的是None表示的是一个空对象,而不是空字符串

 1 # !/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 str1 = 'abcdefg0101ABC字符串'
 5 str2 = '123.456'
 6 str3 = '\tabc\ndef'
 7 str4 = 'a{addmsg1}b{addmsg3}c{addmsg1}d{addmsg2}efg'
 8 # #------------主要的检测方法-----------------
 9 # print(str1.isalpha())    # 判断是否全都是字母
10 # print(str1.isalnum())    # 判断是否只有字母和数字
11 # print(str2.isnumeric())  # 检测字符串是否只由数字组成。这种方法是只针对unicode对象。
12 # print(str2.isdigit())    # 检测是否只有数字组成
13 # print(str2.isdecimal())  # 检测是否只由数字组成,包括汉字的数字、罗马数字。只针对unicode对象。
14 # print(str1.isidentifier()) # 用来判断变量名是否合法
15 # print(str1.islower())    # 检测是否全都是小写字母
16 # print(str1.isupper())    # 检测是否全都是大写字母
17 # print(str2.isprintable())  # 检测是否可打印,可判断包含转译字符。Unicode中“Other” “Separator”不可打印,不包括空格
18 # print(str1.isspace())  # 检测是否仅有空格
19 # print(str1.istitle())  # 检测是否是标题,首字母大写
20 # print(str1.endswith("C"))  # 检测结束字符
21 # print(str1.startswith("abc")) # 检测开始字符或字符串
22 # #-----------主要的格式变化方法----------------
23 # print(str1.strip())  # 去处多余字符,如空格、制表符、换行符,还可以制定字符内容
24 # print(str1.lstrip())
25 # print(str1.rstrip())
26 
27 
28 # print(str1.split(" "))  # 用指定的字符划分,得到的结果存储在列表中,可指定最多的分组数
29 # print(str1.rsplit())   # 从右侧开始划分
30 # print(str1.partition("0")) # 分组,保留划分用的元素
31 
32 
33 # print(str1.center(20,"*"))  # 指定最少占用的空间大小,对象放中间。超过不要紧,不够用指定字符填充
34 # print(str1.ljust(20,'<'))  # 内容对象在左边
35 # print(str1.rjust(20,'>')) # 内容对象在右边
36 # print(str1.zfill(30))     # 内容对象在右边,不足的空间用0补充
37 
38 # print(str1.capitalize())   # 首字母大写,其他的英文小写
39 # print(str1.upper())        # 所有的英文字母变大写
40 # print(str1.lower())        # 所有的英文字母变小写
41 # print(str1.casefold())     # 把包括英文字母在内的能变小写的字母都变小写,如法语/俄语等
42 # print(str1.swapcase())     # 大写的小写,同时小写的变大写
43 
44 # print(str1.count("0"))       # 计数,也可以指定起止范围
45 
46 # print(str1.encode('utf-8'))   # 字符编码,很重要
47 # print(str1.encode('utf-8').decode('utf-8'))   # 字符编码后解码
48 
49 # print(str3)
50 # print(str3.expandtabs())                  # 把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8
51 
52 # print(str1.find("z"))        # 作用类似于index,但没有的时候返回-1
53 # print(str1.index('z'))         # 返回指定字符串的索引,没有的时候,报错
54 
55 # print(str4.format(addmsg1='1#',addmsg2='2#',addmsg3='3#'))   # 根据锚点高效替换
56 # print(str4.format_map({'addmsg1':'map1#','addmsg2':'map2#','addmsg3':'map3#'}))  # 根据锚点高效替换,键值对形式
57 
58 # print("*中*间*".join(str1))      # 用指定的字符串,把序列(包括字符串、列表等)的元素,拼接起来
59 
60 
61 # screat1="abcdefg"               # 替换,加密
62 # screat2="1234567"
63 # transtab="".maketrans(screat1,screat2)
64 # print(transtab)
65 # print(str1.translate(transtab))
66 
67 # print(str1.replace('1','!'))      #替换
68 
69 
70 
71 list = ['123','试试','zhangsan']
72 msg = input('>>').strip()
73 print(msg)
74 if msg=='':
75     print('')
76 for item in list:
77     if msg in item:
78         print(item)
字符串操作示例

 

 

  

  格式化输出设置参考

 

  在对字符串中包括的数据进行类型判断时(主要是数字、字母,较为复杂的可考虑正则表达式)。常见的方法有:

 

  str.isalnum() 所有字符都是数字或字母

  str.isdigit() 所有字符都是数字

  str.isalpha() 所有字符都是字母

  str.islower() 所有字符都是小写

  str.isupper() 所有字符都是大写

  str.istitle() 所有单词都是首字母大写,像标题

  str.isspace() 所有字符都是空白字符或\t\n\r

 

 

 

 

      List(列表):

   可以实现存储较大量的信息,并且存储信息之间是相互独立的。

      查询速度随数据量增大而变慢,但运行过程节省内存空间,省资源。

  步长,取值的间隔长度。常见在循环语句、切片等操作。步长取正值,表示正向。步长取负值表示逆向取值,另外,也可以轻松实现反转。

  一些增删改查的例子:

  

 1 # !/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 # 定义列表
 5 li_1 = ['zhangsan','lisi','wangwu']
 6 
 7 
 8 
 9 # # 增
10 # li_1.append('zhaoliu')
11 # print("追加——》",li_1)
12 #
13 # li_1.insert(2,"insert2")
14 # print("插入——》",li_1)
15 #
16 #
17 # li_2 = ['打酱油2']
18 # li_3=li_1+li_2
19 # print('+'+'后的效果',li_1,'\n',li_3)
20 #
21 # li_1.extend(li_2)
22 # print("extend效果——》",li_1)
23 
24 
25 #
26 # li_1.pop()           # 如果不加参数,删除并返回最后一个值,用变量来接收的话,可理解为从管道中取值,当列表为空,报错
27 # print(li_1)
28 # li_1.pop(1)
29 # print("pop上面未指定,这个指定——》",li_1)
30 # li_1.remove(li_1[2])  # remove必须是列表中存在的元素,否则会报错
31 # print("remove打酱油——》",li_1)
32 
33 #
34 #
35 #
36 # del li_1[0]
37 # print('del删了第一个',li_1)
38 # del li_2
39 # print(li_2)此时已经将li_2完全删除,再调用会报错
40 #
41 #
42 #
43 # # 改
44 # li_1[1]='改动1'
45 # print(li_1)
46 #
47 # # 查
48 # print("查找例子1",li_3[0])
49 # print("查找例子2",li_3.index('wangwu'))
50 # print("查找例子3","打酱油2" in li_3 )
51 # print(li_1.index("zhangsan"))      #查取索引,如果没有,报错
52 # print(li_1.count("zhagnsan"))
53 
54 
55 # #切片
56 # print(li_1[1:2])
57 # print(li_1[-2: ])
58 # print(li_1[-2: :-1])
59 
60 # 反转
61 # print(li_1[::-1])      # 只是实现了逆向输出,原列表实际排序不变
62 # print(li_1)
63 # li_1.reverse()         # 改变原列表的排序,直接反转
64 # print(li_1)
65 
66 # # 排序
67 # li_1.sort()      # 默认的是按照ascii码表排序,数字和字符串在python3.x中是不能同时排序的
68 # print(li_1)
69 
70 
71 # #--------------列表操作小结-----------------------
72 # names=['金角大王','黑姑娘','rain','eva','狗蛋','银角大王','eva']
73 # print('第2个eva索引:',names.index('eva',names.index('eva')+1))
74 # re_names=names[::-1]
75 # print("切片反转",re_names)
76 # for i in range(len(names)):
77 #     if i%2==1:
78 #         print('打印索引为奇数的',names[i])
79 # names[names.index('eva',names.index('eva')+1)]='EVA'
80 # print('修改第2个eva为EVA',names)
列表操作实例

 

 

 

 

 

 

 

      Tuple(元组):

 

      Dictionary(字典):

      字典的查找速度快尤其是在数据量大的情况下更为明显,但消耗内存大。简单点理解,主要是由于对key值进行了hash,并且存储的时候,对hash值进行了排序存在列表空间中。在查询过程中,对输入值进行hash以后,在存储hash的空间中进行快速查找。

  

      字典的遍历有两种常见方式,

1 #方式一:
2 for i in dic1:
3     print(i)    #默认遍历key值
4     print(dic1[i])
5 
6 #方式二:
7 for i indic.items():
8     print(i)    #相对相率低一些,优于先到后台将字典元素取出转化成列表,再遍历。

 

 1 # !/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # --------创建-----------
 4 dict1={'zhangsan':[11,'','1234abc']}
 5 dict2=dict(lisi=[12,'','1234abc'],wangwu=[13,'','1234abc'])
 6 dict3={}.fromkeys([i for i in range(10)],'0000')
 7 
 8 #print(dict1,'\n',dict2,'\n',dict3)
 9 
10 # #-----------------增---------------------------
11 # dict1['add01']="我是新来的"
12 # print(dict1)
13 # dict1.setdefault('add02','new02')
14 # print(dict1)
15 # dict1.setdefault("lisi",'try')
16 # print(dict1)
17 
18 
19 
20 # #-----------------删---------------------------
21 # del dict3[0]
22 # print(dict3)
23 # dict3.pop(1)
24 # print(dict3)
25 # dict3.popitem()
26 # print(dict3)
27 # dict3.clear()
28 # print(dict3)
29 # del dict3
30 # print(dict3)
31 
32 
33 ##-----------------改---------------------------
34 # dict1.update(dict2)
35 # print(dict1,"\n",dict2)
36 # dict3[1]='3#新来的'
37 # print(dict3)
38 
39 #-----------------查---------------------------
40 # print(dict3[4])
41 # print(dict3.get(5))
42 # print(dict3.get(100))
43 # print(type(dict2.keys()))
44 # print(dict2.values())
45 # print(dict2.items())
46 
47 #-----------------遍历---------------------------
48 for i in dict2:
49     print(i)
50 for i in dict2.keys():
51     print(i)
52 for i in dict2.values():
53     print(i)
54 for i in dict2.items():
55     print(i)
56 for k,v in dict2.items():
57     print(k,v)
字典操作示例

 

 

 

 

      Set(集合):

      set的元素必须是可以hash的数据类型,因为在set存储过程中会经过hash处理。

     元素必须是不可变的,列表、字典等不行 ,无序,并且不存在完全相同的元素(自动去重) 

 remove,pop和discard的区别:

      discard删除指定元素,当指定元素不存在时,不报错;

      remove删除指定元素,但当指定元素不存在时,报错:KeyError。

      pop删除任意元素,并可将移除的元素赋值给一个变量,不能指定元素移除。

 1 # !/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # -------------创建---------------------
 4 set1=set([1,2,2,3,2,5,6])
 5 set2={1,3,2,3,7,9,11,12}           # 实际上生成的集合,已经将重复的删除了
 6 # -------------增---------------------
 7 # set1.add('add01')
 8 # print(set1)
 9 
10 
11 # -------------删---------------------
12 # set1.discard(1)    # 删除指定的元素,如果没有当前元素,不作操作
13 # print(set1)
14 # set1.pop()
15 # print(set1)
16 # set1.remove(5)
17 # print(set1)
18 
19 
20 
21 
22 # -------------改---------------------
23 
24 # -------------查---------------------
25 # print('a' in set1)
26 
27 # -------------关系运算-------------
28 #---交差并补对称差集-----
29 # print(set1 & set2)
30 # print(set1 - set2)
31 # print(set1 | set2)
32 # print(set1 ^ set2)
集合操作示例

 

 

      数据类型的扩展

  • 字节类型(bytes)
    • 是单独的数据类型

  

  • frozenset,冻结集合。
    • 通过方法frozenset()返回的冻结集合对象,为不可变数据类型

  

  •  切片
    • [起始索引:结束索引:步长   ] 
    • 顾头不顾尾
    • 步长为负数表示逆向
    • 字典不能哈希,所以不能进行切片操作

  

 

 

      深浅copy与赋值

      深浅拷贝现象的出现,主要源于存储的可变数据类型。

      首先了解下,

      A:可变数据类型,即在对变量内容进行操作时(增加、改动),a - 变量指向的内存地址不会发生变化,b - 变量指向的内存地址所存储的内容会相应更新。但是,在进行重新赋值时,即使是内容与之前存储ID地址所指向的内容一致,也会重新开辟新的id并存储响应的赋值。

      B:不可变,在变量的赋值被改变(增加、改动)时,实际上是发生了对变量的重新定义,具体的,a - 变量指向的内存地址会发生变化,b - 变量指向的内存地址存储的内容是新定义的内容。(注意,此时原来的内存地址如未被释放的话,会仍旧存放着之前的内容)。

  1.  Python中的变量的存储,
  2.  
  3.  
  4.  

 

 


posted @ 2019-04-23 21:35  林山风火  阅读(920)  评论(0编辑  收藏  举报