Python基础2—变量
一、数字
1、int 占32个字位4个字节,范围为-2^31~~~~2^31-1 定义
定义方法:直接使用,如:num=2
2、long 长整数的大小与虚拟内存大小有关
定义方法:直接使用,当整数超出int的范围时自动使用long
3、float
定义方法:直接使用,如:num=2.1
4、complex 复数
定义方法:直接使用,如:num=2+3j(不能习惯性用i,否则会报错)
5、bool 布尔 非空非0为真,0或空为假
定义方法:直接使用,如:judge=True(注意区分大小写,用true或者false会报错)
6、空值:None,空值与任何值比较永远都是False
二、字符
str(字符,python不分字符和字符串),但注意,字符不可变,如str4=’123456‘,则str4[2]=‘7’会报错,即字符一旦使用了只能重新赋值,不能通过索引改变其值
1、定义方法:直接使用,如:jstr1=‘hello’,python中使用字符时可以使用‘ ’和“ ”,两者语法上都是通过的,但如果字符变量中有其中一个,且又使用了其定义,可以使用转义字符
如 str2=“he say:"bye" and then leave” 定义和变量中都有双引号,因此定义时应该这样定义:“he say:\"bye\" and then leave”
2、索引:python索引可以从左到右,也可以从右到左,但注意的是,从左到右是从0开始,但从右到左是从-1开始,如str3=‘abcd’,则str3[2]表示c,str3[-1]表示d
3、切片:①str3[m:n]:取字符串从m到n(不取n,只取n-1),特殊情况:str3[:]:取整个字符,str3[0:]:从第0个取到最后一个
②str3[m:n:k]从m到n(同str3[m:n],只取到n-1),每隔k个取一个(k包含所取的字符)如:str4=‘abcdefg’,则str4[0: :1]='abcdefg',则str4[0: :2]='aceg',k也课为负,负代表方向从右到左,如str4[0: :-1]='a'
三、列表(list)
①定义方法:用括号定义,mylist=[1,2,3,4,‘a’]
②列表中的元素的数据类型可以是不一样的,如mylist,有整数,又有字符,甚至列表中还可以有列表,有元组,可以多层嵌套使用|(多层嵌套时的索引用多个下标,如mylist2=[1,2,[1,2,3]],则3的索引为mylist2[2]2[])
③可变,可以用mylist[2]='b',把mylist改成mylist=[1,2,'b',4,‘a’](列表的索引从0开始)
④获取列表长度:len(列表名),如:len(mylist),运行得到结果为:5
⑤访问列表元素:列表名[index] ,如:mylist[2],运行得到结果为:b
⑥添加列表元素:列表名.append(新值),即可在列表尾部添加元素,如:mylist.append('c')
⑦插入元素:列表名.insert(index,新值),如:mylist.insert(2,3),则mylist变为:[1,2,3,'b',4,‘a’]
⑧将一个列表的每个元素分别添加到另一个列表中:mylist_2=['k','p','l'],mylist.extens(mylist_2),则mylist变为:[1,2,3,'b',4,‘a’,'k','p',‘l']
⑨合并列表:用'+'即可,如myli_3=mylist+mylist_2
⑩删除元素:del 列表名[index] 如:del mylist[8],则[1,2,3,'b',4,‘a’,'k','p']
⑾定位元素:列表名.index(vlaue),如:mylist.index(’1‘),得到的结果为0
⑿列表排序:列表名.sort(),如:mylist=[1,2,7,4,9,22],mylist.sort(),即可对mylist进行升序排序(排序时列表的元素必须是同种类型,int和str不能进行排序)
列表名.reverse(),如mylist.reverse(),即可对mylist进行反序排序
若要对列表进行降序排序,可以先用sort方法然后再调用reverse方法即可
⒀产生一个树枝递增列表:range(start,end)start:起始元素,默认为0,取到这个元素;end截止元素,不取到这个元素
⒁遍历列表:
1 #for 语句和 range()函数遍历列表 2 mylist_1=[1,2,3,'b',4,'a','k','p'] 3 for i in range(len(mylist_1)): 4 print(mylist_1[i]) 5 6 #for语句和enumerate()函数遍历元素索引和元素值 7 for index,value in enumerate(mylist_1): 8 print('第%d个元素值是[%s]'%(index,value)) 9 10 #遍历多维列表 11 mylist_2=[[1,2],[3,4,5]] 12 for index in range(len(mylist_2)): 13 list1=mylist_2[index] 14 for j in range(len(list1)): 15 print(list1[j]) 16 17 for index in range(len(mylist_2)): 18 for j in range(len(mylist_2[index])): 19 print(mylist_2[index][j])
⑮extend:原型:list.extend(seq),用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
四、元组(tuple)
①定义方法:用括号定义,如:mytuple=(0,1,2)
②元组不可变,mytuple[0]=‘3’会报错
③元组可跟列表嵌套使用,但元组中的列表可变,列表中的元组不可变
④单个元素的元组回归元素类型,如mytuple=(1),则type(mytuple)的返回值为class‘int’,但mytuple=(1,)则type(mytuple)的返回值为class‘tuple’,mytuple=()则type(mytuple)的返回值为class‘tuple’
⑤访问元组元素、获取长度、遍历元组均与列表一样
⑥排序:元组不可变,因此要对元组进行排序就必须将元组转换成列表,然后排序后再转换成元组
元组转换成列表:列表对象=list(元组对象)
列表转换成元组:列表对象=tuple(列表对象)
1 tuple_1=('apple','banana','pear','grape') 2 list_1=list(tuple_1) 3 list_1.sort(); 4 tuple_1=tuple(list_1) 5 print(tuple_1)
五、字典(dict)
①定义方法:用大括号定义,如d1={‘name’:‘蔡昆杰’,‘age’:22,‘sex’:‘male’}
②字典的元素都有键(key)和值(value),可嵌套使用,如d2={’name‘:{'first':’John‘,’last‘:'Lee’},‘age’:30},访问嵌套字典时同列表,用两个key即可,如d2['name']['first']
③打印、获取长度与列表相似
④访问元素:字典名[key],如:d={'name':'coffee','price':10},d['name']得到的结果为:coffee
⑤添加元素:字典名[key]=value;注意,如果key是字典原先已经有的,如:d['name']='tea',则字典变为:{'name': 'tea', 'price': 10}
⑥合并字典:可用update()函数,字典1.updat.(字典2),注意:如果字典2中有字典1中的键,则合并后的键值以字典2的为准,原理同⑤添加元素
⑦删除元素:字典名.pop(key),如:d.pop('name')
⑧判断元素是否在字典内:key in 字典名 ,返回的是bool值
⑨清空字典:字典名.clear()
⑩遍历字典:可用for...in语句
1 d={'name':'coffee','price':10,'color':'gray'} 2 #用for...in遍历字典的键和值 3 for key in d.keys(): 4 print(key)#访问键 5 print(d[key])#访问值 6 #遍历字典的值 7 for value in d.values(): 8 print(value) 9 #访问的是键还是值关键看是d.keys还是d.values
六、集合(set、frozenset)
①定义:使用set()定义可变集合,如:s=set(‘python’);用frozenset()定义不可变集合,如s_2=frozenset(‘hello’),集合都是无序的
②可变集合是无序的,如print(s)得到的结果可能是:{'y', 'h', 't', 'o', 'p', 'n'},也可能是:{'o', 'h', 'y', 't', 'p', 'n'},有6!=720种可能;不可变集合也一样,但前面有frozenset,如:frozenset({'e', 'o', 'l', 'h'})
③获取长度:len(集合名),
④访问集合:集合无序,不能用索引访问,也不能用切片操作,只能用循环遍历集合元素
⑤元素增删:集合名.add(值)添加单个元素,集合名.update(值)添加多个元素;集合名.remove(值)删除元素,集合名.clear()清空集合
1 s=set ([1,2,3]) 2 print(s) 3 s.add(4)#s.add([4])和s.add([4,])会报错,会把内部的4当成一个列表 4 print(s) 5 s.update([4,5,6]) 6 print(s) 7 s.remove(4) 8 print(s) 9 s.clear()
⑥判断元素是否存在集合:值 in 集合名,返回的值是bool
⑦遍历集合:可以用for...in遍历,如:for e in s:print()
⑧子集超集:A中所有元素都是B的元素,则A是B的子集,B是A的超集
⑨集合的运算:Ⅰ并集:用 | 求并集,如:s=s1 | s2;或者用union()函数,如:s=s1.(s2)
Ⅱ交集:& ,也可用 intersection()函数
Ⅲ差集:-(s=s1-s2,结果为s1除去s2中的元素),也可用difference()函数
Ⅳ对称差分:︿(s=s1︿s2,s为s1和s2除去共有的元素剩下的元素的集) 也可用symmetric_difference()函数
七、变量的共性
①变量不需要先定义,可直接赋值使用,至于数据的类型则取决于后面给变量所赋的值
②变量可重复存储不同的数据类型,如num=1,num=‘num’是可以的
③可同时为多个变量赋值
④变量名遵循C语言风格,可以由字母、数字、下划线组成,但不可以以数字开通,也不能使用下划线以外的符号
⑤变量不支持自增自减,如a++、a--是错误的,应写成a+=1,a-=1;++a和--a成立,但不是自增或者自减,前面的‘+’,’-‘只代表正负
⑥变量引用计数:把一个变量的值赋给另一个变量时,如a=1,b=a;则此时不会为b再开辟独立的值空间,只会把b的值的指针指向a的值空间,这导致在变量a和变量b是可变的时候变量b变的时候a也会变
#列表等可变变量的赋值要注意
list1=[1,2,3,4]
list2=[1,2,3,4]
#此时两个列表在内存中占的空间不同,任一改变不会影响另一个
list2=list1
#此时list2引用了list1的内存空间,任一改变会影响另一列表的值
list2=list1[:]
#只是切片复制,如果list1只是简单的数据,则list1改变,list2不改变
#但若list1里面有列表,则列表里面的列表改变,list2也改变
#完美拷贝
import copy
list2=copy.deepcopy(list1)
2018-04-14