Python自学之路——Python基础(二)——常用数据类型

.pyc文件

Python是一门高级的语言,计算机是不能识别的,所以需要将高级语言转化为计算机能识别的计算机语言,而这个过程分为两类,一类是编译,一类是解释。

PyCodeObject是将Python运行过程中编译的结果在内存中保存,并在Python程序运行结束时,Python解释器将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

常用数据类型

  • 列表(list)

下标是从0开始

从列表中取数的相关操作

 1 >>> age=27
 2 >>> list=["xiaoming","xiaohong","xiaofang",1,2,3,age]#列表元素可以是变量
 3 >>> list
 4 ['xiaoming', 'xiaohong', 'xiaofang', 1, 2, 3, 27]
 5 >>> list[0]    #下标从0开始 
 6 'xiaoming'
 7 >>> list[-1]   #取最后一个元素
 8 27
 9 >>> list[0:1] #取数“顾头不顾尾”
10 ['xiaoming']
11 >>> list[2:4]
12 ['xiaofang', 1]
13 >>> list[-5:-1]
14 ['xiaofang', 1, 2, 3]
15 >>> list[-5:] #这种方式才能一起取到最后一个元素
16 ['xiaofang', 1, 2, 3, 27]
17 >>> list[:]    #取所有元素
18 ['xiaoming', 'xiaohong', 'xiaofang', 1, 2, 3, 27]
19 >>> list[:5]
20 ['xiaoming', 'xiaohong', 'xiaofang', 1, 2]
21 >>> list[:5][1] #切片
22 'xiaohong'
23 >>> list[:5][1][2]
24 'a'
List

 基本操作

几点说明:

  1. 当列表中的元素也有列表类元素时,使用.copy()操作只能copy列表的第一层,列表元素中的列表并不能copy,因为该元素实质是指向另一个内存地址的。当你想全部copy时,可以使用copy()标准库  copy.deepcopy()来实现。换句话说,copy是软链接,而deepcopy是真正的克隆
  2. 列表赋值给列表和使用copy操作修改列表元素是有区别的,详见代码
  3. python3中,sort()排序操作会出错
 1 >>> list[1]="xiaolan"               #列表元素更改
 2 >>> list.insert(2,"xiaopang")       #按下标插入元素
 3 >>> list.append("lin")              #在列表末尾插入元素
 4 >>> list.remove("xiaopang")         #删除指定元素
 5 >>> list.pop()                      #默认删除列表最后一个元素,也可以按下标删除指定元素
 6 'wangwu'
 7 >>> list.pop(1)
 8 3
 9 >>> del list[3:5]                   #可连续删除多个元素
10 >>> print(list[0::2])               #按步长取数,步长默认是1
11 >>> 3 in list
12 >>> num=list.count(3)               #对相同元素进行计数
13 >>> position=list.index(3)          #返回第一个出现指定元素的下标
14 >>> list.extend(list1)              #扩展列表 
15 >>> list1.reverse                   #列表反序排列
16 
17  #列表的copy
18  >>> list=['xiaoming', 'xiaolan', 'xiaofang', [3, 27], 'lin', 'zhangsan', 'lisi']
19 >>> list1=list.copy()
20 >>> list[0]="xiaopang"
21 >>> list
22 ['xiaopang', 'xiaolan', 'xiaofang', [3, 27], 'lin', 'zhangsan', 'lisi']
23 >>> list1
24 ['xiaoming', 'xiaolan', 'xiaofang', [3, 27], 'lin', 'zhangsan', 'lisi']
25 >>> list1[3][0]=33333
26 >>> list
27 ['xiaopang', 'xiaolan', 'xiaofang', [33333, 27], 'lin', 'zhangsan', 'lisi']
28 >>> list1
29 ['xiaoming', 'xiaolan', 'xiaofang', [33333, 27], 'lin', 'zhangsan', 'lisi']
30 >>> list1[3][0]=44444
31 >>> list
32 ['xiaopang', 'xiaolan', 'xiaofang', [44444, 27], 'lin', 'zhangsan', 'lisi']
33 >>> list1
34 ['xiaoming', 'xiaolan', 'xiaofang', [44444, 27], 'lin', 'zhangsan', 'lisi']
35 >>> import copy
36 >>> list2=copy.deepcopy(list)
37 >>> list2
38 ['xiaopang', 'xiaolan', 'xiaofang', [44444, 27], 'lin', 'zhangsan', 'lisi']
39 >>> list[3][0]=1111111
40 >>> list2
41 ['xiaopang', 'xiaolan', 'xiaofang', [44444, 27], 'lin', 'zhangsan', 'lisi']
42 >>> list1
43 ['xiaoming', 'xiaolan', 'xiaofang', [1111111, 27], 'lin', 'zhangsan', 'lisi']
44 
45 
46 #列表的赋值
47 >>> name=[1,2,3,4]
48 >>> name1=name
49 >>> name1[1]=33333
50 >>> name
51 [1, 33333, 3, 4]
List_operation
  • 元组(tuple)

元组的元素是不可变的,但是元组里元素的元素是可变的

常用的操作包括 计数count()和索引index()

 1 >>> tuple=(1,2,3,"alex",[2,3,4])
 2 >>> tuple
 3 (1, 2, 3, 'alex', [2, 3, 4])
 4 >>> num=tuple.count(2)
 5 >>> print(num)
 6 1
 7 >>> index=tuple.index(3)
 8 >>> print(index)
 9 2
10 >>> tuple[4][0]=2222
11 >>> tuple
12 (1, 2, 3, 'alex', [2222, 3, 4])        #元素的元素可改
Tuple
  • 字符串(string)

字符串是最常用的数据类型,常用操作也比较多

http://www.runoob.com/python3/python3-string.html

一些代码练习

 1 name=input("Please input your name:")
 2 print("hei:%s is you" % (name.strip()))        #默认是移除空白,也可以移除别的格式
 3 names="alex,eric,jack"
 4 names_split=names.split(",")
 5 print(names_split)
 6 print("|".join(names_split))
 7 print(names.index("alex"))
 8 print("eric" in names)
 9 
10 #输出结果
11 Please input your name:lidna  
12 hei:lidna is you
13 ['alex', 'eric', 'jack']
14 alex|eric|jack
15 0
16 True
String1
 1 msg="Hello,{name},it's been a long {age} since last time sopke..."
 2 msg2="haha {0},hehe {1}"
 3 print(msg2.format("lind","zqq"))
 4 msg2=msg.format(name="linda",age=22)
 5 print(msg2)
 6 #输出结果:
 7 haha lind,hehe zqq
 8 Hello,linda,it's been a long 22 since last time sopke...
 9 
10 name="Linda lin"
11 print(name.center(40,'-'))
12 ---------------Linda lin----------------  #输出结果
13  
14 name="Linda lin"
15 print(name.find("i"))        #返回第一个下标,若查找为空,则返回-1;
String2
  •  字典(dict)

字典也是一个存储数据的模型,可存储任意类型的对象。

字典的键值对(key->value)用:分割,每个键值对用,分割,整个字典用({})标识

几点注意:

  1. key必须是唯一的,如果创建重复的key时,后一个会被记住;value不必
  2. value可以是任意类型的数据,但是key必须是不可变的,如字符串、数字、元组

字典的常用操作

访问字典的值

 dic={'name':"rose",'age':27,'addr':"USA"}
 print("dic[name]:",dic['name'])
 print("dic[age]:",dic['age'])
 输出结果:
 dic[name]: rose
 dic[age]: 27

修改字典的值

dic={'name':"rose",'age':27,'addr':"USA"}
dic['name']="Jack"
dic['sex']="Woman"
print("dic[name]:",dic['name'])                #修改信息
print("dic[sex]:",dic['sex'])                  #增加信息
输出结果:
dic[name]: Jack
dic[sex]: Woman

 删除字典

dic={'name':"rose",'age':27,'addr':"USA"}
del dic['name']                                 #删除指定的元素
print(dic)
dic.clear()                                     #删除字典里的所有元素,留下一个空字典
print(dic)
del dic                                         #这样删除会把整个字典删除,print命令会出错,因为dic这个字典已经不存在了
print(dic)
输出结果:
{'addr': 'USA', 'age': 27}
{}
    print(dic)
NameError: name 'dic' is not defined

字典的内置函数和方法

内置函数

内置方法

  • 集合(set)

集合是一类无序不重复的数据类型,支持union(并)intersection(交) difference(差)symmetric_difference(对称差)等数学运算,但由于集合是无序的,所以它不能使用index split等序列化的操作。

创建集合

s = set()
print(s)
st = 'alex'
s = set(st)
print(s)
lis = [11, 22, 33]
s = set(lis)
print(s)
dic = {'age': 22, 'name': 'jack'}
s = set(dic)
print(s)
输出结果:
set()
{'l', 'e', 'a', 'x'}
{33, 11, 22}
{'age', 'name'}

集合操作

 1 s = set()
 2 print(s)
 3 s.add(1)#添加一个元素
 4 print(s)
 5 s.clear()#清除所有元素
 6 print(s)
 7 s1 = {11, 22, 33}
 8 s2 = {22, 33, 44}
 9 s3 = s1.difference(s2)#s1中存在,s2中不存在的元素(差)
10 print(s3)
11 s3 = s1.symmetric_difference(s2)#s1,s2中不相同的元素(对称差)
12 print(s3)
13 s1.difference_update(s2)#从当前集合中删除与s2相同的元素
14 print(s1)
15 s1 = {11, 22, 33}
16 s1.symmetric_difference_update(s2)#将对称差集更新到s1中
17 print(s1)
18 输出结果:
19 set()
20 {1}
21 set()
22 {11}
23 {11, 44}
24 {11}
25 {11, 44}
Set1
 1 s1 = {11, 22, 33}
 2 s1.discard(11)#删除指定元素,不存在不报错
 3 print(s1)
 4 s1.discard(1111)
 5 s1.remove(22)#删除指定元素,不存在会报错
 6 print(s1)
 7 #s1.remove(11111)
 8 s1 = {11, 22, 33}
 9 res = s1.pop()#返回删除的元素
10 print(res)
11 
12 s1 = {11,22,33}
13 s2 = {22,33,44}
14 s3 = s1.union(s2)#合并两个集合
15 print(s3)
16 s3 = s1.intersection(s2)#取集合的交集
17 print(s3)
18 s1.intersection_update(s2)#取s1和s2的交集并且更新到s1中
19 print(s1)
20 st = 'alexalex'
21 s1.update(st)#将st里的元素更新到s1中
22 print(s1)
23 输出结果:
24 {33, 22}
25 {33}
26 33
27 {33, 22, 11, 44}
28 {33, 22}
29 {33, 22}
30 {33, 'l', 'x', 'e', 22, 'a'}
Set2                                                                                      
posted @ 2016-08-23 17:14  木木dan子  阅读(468)  评论(0编辑  收藏  举报