标签:
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 |
字符串的常用功能太多了,这里我例举几种常见的功能,具体请看下面的代码
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 |
列表是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和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‘) |
字典是无序的,使用键-值(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) |
为一个可迭代的对象添加序号,可迭代的对象你可以理解成能用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 游艇 |
在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) |
为什么要拷贝?
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是不会改变的因为是两个独立的字典!
标签:
原文地址:http://www.cnblogs.com/wumingxiaoyao/p/5703172.html