码迷,mamicode.com
首页 > 编程语言 > 详细

Python3学习笔记和心得(二)

时间:2016-07-25 14:28:48      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:

数据类型

一、数字(int)

  Python可以处理任意大小的正负整数,但是实际中跟我们计算机的内存有关,在32位机器上,整数的位数为32位,取值范围为 -2**31~2**31-1,在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1。对于int类型,需要掌握的方法不多,看 下面的几个例子:

1
2
3
4
5
6
a=4
print(a.bit_length()) # 4在二进制中可以用最少3位 100 来表示4,所以输出3
print(int(‘4‘))       #将字符串4转换成整数4
 
# int还可下面的将二进制的字符串转换成整数, base=2 代表前面的字符串是二进制。
print(int(‘1010‘,base=2)) # 输出10

二、字符串(str)

  字符串的常用功能太多了,这里我例举几种常见的功能,具体请看下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
s="abcdef ghg k"
print(s.title())              #将字符串转换成标题,输出 Abcdef Ghg K
 
print(s.capitalize())         #将字符串首字母大写,输出 Abcdef ghg k
 
print(s.count(‘d‘,0,len(s)))  #计算出子串 ‘d‘在母串中出现的次数,默认是在整个母串中查找,
                  #可以在后面跟两个参数指定起始位置查找,这里我指定了在(0,len(s))中查找,
                  #其中len(s)代表获取字符串长度
 
print(s.startswith(‘a‘))      #判断字符串是否以什么开头,这里输出True,
 
print(s.find(‘g‘,0,len(s)))   #查找子串第一次在母串中出现的位置,这里输出7,同样可以自己指定位置范围来搜查
 
print(s.upper())              #将字符串转换成大写,这里输出ABCDEF GHG K
 
print(s.join([‘a‘,‘b‘,‘c‘]))  #用字符串 s 来连接列表[‘a‘,‘b‘,‘c‘] 输出 aabcdef ghg kbabcdef ghg kc
 
print(s.strip())         #移除两侧空格
 
print(s.split())         #分割字符串,返回一个列表 这里输出[‘abcdef‘, ‘ghg‘, ‘k‘]
 
print(s.replace(‘g‘,‘G‘,1))   #替换,默认全部替换,可以设置为1,只替换一次,这里只替换一次输出abcdef Ghg k
 
print(s[0:4])                 #切片,[0:4]代表将字符串s的前面4位取出来,这里输出 abcd

 三、列表(list)

  列表是Python内置的一种数据类型是列表,是一种有序的集合,可以随时添加和删除其中的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
l=[‘a‘,‘b‘,‘cc‘,4]     #定义一个列表
 
l.insert(4,6)               #在下标为4的位置,插入值6
 
l.append(5)         #添加一个元素,l=[‘a‘, ‘b‘, ‘cc‘, 4, 5]
 
l.pop()           #从尾部删除一个元素,l=[‘a‘, ‘b‘, ‘cc‘, 4]
 
l.remove(‘a‘)         #从列表中移除 ‘a‘,l=[‘b‘, ‘cc‘, 4]
 
l.extend([‘gg‘,‘kk‘])     #添加一个列表[‘gg‘,‘kk‘], l=[‘b‘, ‘cc‘, 4, ‘gg‘, ‘kk‘]
 
l.reverse()          #反转一个列表,l=[‘kk‘, ‘gg‘, 4, ‘cc‘, ‘b‘]
 
print(l.count(‘kk‘))     #某元素出现的次数 输出 1
 
print(l.index(‘gg‘))     #元素出现的位置,输出 1
 
for i in l:          #循环输出列表元素
    print(i)
 
print(l[0:4:2])       #列表切片,以步长2递增,输出[‘kk‘, 4]

 四、元组(tuple)

  tuple和list非常类似,但是tuple一旦初始化就不能修改,tuple也是有序的,tuple使用的是小括号标识。

1
2
3
4
5
6
7
8
9
10
11
12
t=(‘a‘,‘b‘,‘b‘,‘c‘)   #定义一个元组
 
print(t.index(‘b‘))   #索引出元素第一次出现的位置,还可以指定在某一范围里查找,这里默认在整个元组里查找输出1
 
print(t.count(‘b‘))   #计算元素出现的次数,这里输出2
 
print(len(t))      #输出远组的长度,这里输出4
 
for i in t:
    print(i)       #循环打印出元组数据
 
print(t[1:3])       #切片 输出(‘b‘,‘b‘)

五、字典(dict)

  字典是无序的,使用键-值(key-value)存储,具有极快的查找速度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
d = {‘Michael‘: 95, ‘Bob‘: 75, ‘Tracy‘: 85}
 
d.get(‘Bob‘)                     #根据key获取values,如果不存在返回None,这里输出75
 
d.pop(‘Bob‘)                     #根据键删除某一元素 d={‘Michael‘: 95, ‘Tracy‘: 85}
 
d[‘Jason‘]=99                       #新增元素 d={‘Michael‘: 95, ‘Tracy‘: 85, ‘Jason‘: 99}
 
print(len(d))                       #输出字典长度,这里输出3
 
print(‘Jason‘ in d)                 #python3 中移除了 has_key,要判断键是否存在用in
 
for i in d:
    print(i)                     #循环默认按键输出
 
for i in d.values():                #循环按值输出
    print(i)
 
for k,v in d.items():                #循环按键值输出
    print(k,v)

 补充

一 、enumrate

  为一个可迭代的对象添加序号,可迭代的对象你可以理解成能用for循环的就是可迭代的。默认是编号是从0开始,可以设置从1开始

1
2
3
4
5
6
7
li = ["手机", "电脑", ‘鼠标垫‘, ‘游艇‘]
for k, i in enumerate(li,1):
    print(k,i)
1 手机
2 电脑
3 鼠标垫
4 游艇

二、range和xrange

  在python2中有xrange和range,其中range会一次在内存中开辟出了所需的所有资源,而xrange则是在for循环中循环 一次则开辟一次所需的内存,而在Python3中没有xrange,只有range ,但是python3的range代表的就是xrange。range用来指定范围,生成指定的数字。

1
2
3
4
5
for i in range(10):     #循环输出所生成的 0-9
    print(i)
 
for i in range(1,10,2): #输出所生成的 1 3 5 7 9
    print(i)

三、深浅copy

为什么要拷贝?

1
当进行修改时,想要保留原来的数据和修改后的数据

数字字符串 和 集合 在修改时的差异?(深浅拷贝不同的终极原因)

1
2
3
在修改数据时:
  数字字符串:在内存中新建一份数据
         集合:修改内存中的同一份数据

对于集合,如何保留其修改前和修改后的数据?

1
在内存中拷贝一份

对于集合,如何拷贝其n层元素同时拷贝?

1
深拷贝
技术分享
 1 浅copy
 2 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]}
 3 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]}
 4 >>> dict2 = dict.copy()
 5 
 6 
 7 >>> dict["g"][0] = "shuaige"  #第一次我修改的是第二层的数据
 8 >>> print dict
 9 {a‘: (apple‘,), bo‘: {b‘: banna‘, o‘: orange‘}, g‘: [shuaige‘, grapefruit]}
10 >>> print dict2
11 {a‘: (apple‘,), bo‘: {b‘: banna‘, o‘: orange‘}, g‘: [shuaige‘, grapefruit]}
12 >>> id(dict["g"][0]),id(dict2["g"][0])
13 (140422980581296, 140422980581296)  #从这里可以看出第二层他们是用的内存地址
14 >>>
15 
16 
17 >>> dict["a"] = "dashuaige"  #注意第二次这里修改的是第一层
18 >>> print dict
19 {a‘: dashuaige‘, bo‘: {b‘: banna‘, o‘: orange‘}, ‘g‘:[‘shuaige‘,‘grapefruit‘]}‘g‘: [‘shuaige‘, ‘grapefruit‘]}‘g‘: [‘shuaige‘, ‘grapefruit‘]}‘g‘: [‘shuaige‘, ‘grapefruit‘]}
20 >>> print dict2 21 {a‘: (apple‘,), bo‘: {b‘: banna‘, o‘: orange‘}, g‘: [shuaige‘, grapefruit]} 22 >>> 23 >>> id(dict["a"]),id(dict2["a"]) 24 (140422980580816, 140422980552272) #从这里看到第一层他们修改后就不会是相同的内存地址了! 25 >>> 26 27 28 #这里看下,第一次我修改了dict的第二层的数据,dict2也跟着改变了,但是我第二次我修改了dict第一层的数据dict2没有修改。 29 说明:浅copy只是第一层是独立的,其他层面是公用的!作用节省内存 30 31 深copy 32 33 >>> import copy #深copy需要导入模块 34 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]} 35 >>> dict2 = copy.deepcopy(dict) 36 >>> print dict 37 {a‘: (apple‘,), bo‘: {b‘: banna‘, o‘: orange‘}, g‘: [grape‘, grapefruit]} 38 >>> print dict2 39 {a‘: (apple‘,), bo‘: {b‘: banna‘, o‘: orange‘}, g‘: [grape‘, grapefruit]} 40 >>> dict["g"][0] = "shuaige" #修改第二层数据 41 >>> print dict
42 {a‘: (apple‘,), bo‘: {b‘: banna‘, o‘: orange‘}, g‘: [shuaige‘, grapefruit]}
43 >>> print dict2
44 {a‘: (apple‘,), bo‘: {b‘: banna‘, o‘: orange‘}, g‘: [grape‘, grapefruit]}
45 >>> id(dict["g"][0]),id(dict2["g"][0])
46 (140422980580816, 140422980580288)  #从这里看到第二个数据现在也不是公用了
47 
48 # 通过这里可以看出他们现在是一个完全独立的,当你修改dict时dict2是不会改变的因为是两个独立的字典!

‘g‘: [‘shuaige‘, ‘grapefruit‘]} 20 >>> print dict2 21 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 22 >>> 23 >>> id(dict["a"]),id(dict2["a"]) 24 (140422980580816, 140422980552272) #从这里看到第一层他们修改后就不会是相同的内存地址了! 25 >>> 26 27 28 #这里看下,第一次我修改了dict的第二层的数据,dict2也跟着改变了,但是我第二次我修改了dict第一层的数据dict2没有修改。 29 说明:浅copy只是第一层是独立的,其他层面是公用的!作用节省内存 30 31 深copy 32 33 >>> import copy #深copy需要导入模块 34 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]} 35 >>> dict2 = copy.deepcopy(dict) 36 >>> print dict 37 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 38 >>> print dict2 39 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 40 >>> dict["g"][0] = "shuaige" #修改第二层数据 41 >>> print dict 42 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 43 >>> print dict2 44 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 45 >>> id(dict["g"][0]),id(dict2["g"][0]) 46 (140422980580816, 140422980580288) #从这里看到第二个数据现在也不是公用了 47 48 # 通过这里可以看出他们现在是一个完全独立的,当你修改dict时dict2是不会改变的因为是两个独立的字典!
技术分享

 

 

 

   

Python3学习笔记和心得(二)

标签:

原文地址:http://www.cnblogs.com/wumingxiaoyao/p/5703172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!