一、基本数据类型
1、各进制数字的表示和转换
2进制、8进制、16进制的数据在数字之前需要分别增加0b、0o、0x来表示。
>>> 10 #10进制 10 >>> 0b111 #2进制 7 >>> 0o777 #8进制 511 >>> 0xfeda #16进制 65242
各个进制的转换,2进制、8进制、10进制、16进制的转换方法分别为bin()、oct()、int()、hex()。
>>> bin(16) #10进制数转换为2进制 '0b10000' >>> bin(0o766)#8进制数转换为2进制 '0b111110110' >>> oct(0xfff)#16进制数转换为8进制 '0o7777' >>> oct(0b1101)#2进制数转换为8进制 '0o15' >>> int(0b1111)#2进制数转换为10进制 15 >>> int(0o117)#8进制数转换为10进制 79 >>> hex(0b11111111) #2进制数转换为16进制 '0xff' >>> hex(65535) #10进制数转换为16进制 '0xffff'
2、布尔值
Python中的数值0、空值对象以及‘None’的布尔值都为False,其他都为True。
>>> bool(1.1) True >>> bool(0x00) #16进制的数值0 False >>> bool('') #空字符串 False >>> bool([1,2]) True >>> bool(()) False >>> bool(None) False
3、字符串
*多行字符串可以通过三引号表示:''' '''或""" """。
>>> s=''' a b''' >>> s '\na\nb'
可以看到变量s在定义的时候使用了三引号,而在命令行格式中可以看到s的内容是'\na\nb';其中的'\n'就表示了定义时候输入的换行符。这也可以通过s[0]看出:
>>> s[0] '\n'
这里的'\n'也称为转义字符,转义字符在使用print()输出时是按格式显示的,比如换行符\n直接就输出换行,\t输出水平制表符。
>>> print(s) a b
*转义字符:一般为无法看见的特殊字符(如\n、\t等等)或者与语言本身语法有冲突的字符(如\'表示',\\表示\)
#用print打印出'hello \n world!' #\n需要通过转义字符表示 s='hello \\n world' print(s) print('hello \\n world')
*原始字符串:在原始字符串中所有字符都是所见即所得
>>> s=r'\nabc\n' #这里就是原始字符串,其中的\n就是两个字符 >>> s[0] #访问第一个字符,即'\' '\\' >>> #可以看出上面输出了'\\',这里是普通字符串,其中以转移字符串表示了实际的'\' >>> s[1] 'n' >>> print(s) \nabc\n >>> len(s) 7
4、序列(str、list、tuple)
在Python中,str/list/tuple都是有序的数据组合,对于有序的组合,都可以使用下标的方法访问,也可以进行切片操作。
>>> '123'[2] '3' >>> (1,2,5)[0] 1 >>> [1,2,3,'a'][-1] 'a' >>> (1,2,3,4,5)[:5] (1, 2, 3, 4, 5) >>> "12345"[-1:] '5' >>> [1,2,3,4,5,6,7,8,9,10][1:10] [2, 3, 4, 5, 6, 7, 8, 9, 10]
5、str和list/tuple的相互转换
(1)直接通过类型转换函数:
>>> list(s) #字符串转换为列表 ['1', '2', '3', '4', '5'] >>> tuple(s) #字符串转换为元组 ('1', '2', '3', '4', '5') >>> tuple(list(s)) #列表转换为元组 ('1', '2', '3', '4', '5') >>> list(tuple(s)) #元组转换为列表 ['1', '2', '3', '4', '5'] >>> #可以看出str()方法并不能让列表转换成我们想要的字符串内容 >>> #str()方法直接把参数内容当成字符串内容了 >>> str([1,2,3]) '[1, 2, 3]' >>> str([1,2,3])[0] '['
(2)列表和元组转换为字符串必须依靠join函数
>>> ' '.join(['1','2','3']) '1 2 3' >>> ''.join(('a','b','s','123')) 'abs123'
需要注意,只有元素为字符串类型的列表和元组才可以使用join()方法。
(3)字符串转为列表的特殊方法:split()
>>> s='12 34 56 78,90,100 ' >>> s.split() #没有参数时,默认按空格划分原始字符串形成列表各元素 ['12', '34', '56', '78,90,100'] >>> s.split(',') ['12 34 56 78', '90', '100 ']
(4)字符串去除首尾空格、换行字符的方法:strip()
>>> s='\n \n 123 abc 999 \n ' >>> s.strip() '123 abc 999' >>> s '\n \n 123 abc 999 \n ' >>> s.strip().split() ['123', 'abc', '999']
(5)列表排序方法:sort()/sorted()
>>> l=[16,87,35,100,96,62,8,3,19] >>> l.sort() #把l按默认的顺序(这里是由小到大)排序,l变成新列表 >>> l1=[16,87,35,100,96,62,8,3,19] >>> sorted(l1) #返回一个排序后的新列表,l1本身不变化 [3, 8, 16, 19, 35, 62, 87, 96, 100] >>> l1 [16, 87, 35, 100, 96, 62, 8, 3, 19] >>> t=(16,87,35,100,96,62,8,3,19) #元组和字符串也可以使用sorted()方法,返回一个排序后的新列表 #但元组和字符串不能使用sort() >>> sorted(t) [3, 8, 16, 19, 35, 62, 87, 96, 100] >>> t (16, 87, 35, 100, 96, 62, 8, 3, 19) >>> sorted('102814124128765') ['0', '1', '1', '1', '1', '2', '2', '2', '4', '4', '5', '6', '7', '8', '8']
6、集合(set)、字典(dict)
(1)集合是无序的,所以不能通过下标访问,也因为是无序的,所以对于重复的元素在集合中是无法区分的,因为没有顺序之说,所以集合中不能有重复元素。
>>> {1,2,3,4,5}-{1,3,5} #两个set求差集 {2, 4} >>> {1,2,3,4,5}|{6,7,8} #求合集 {1, 2, 3, 4, 5, 6, 7, 8} >>> {1,2,3,4,5,6,7}&{1,3,5,7,9} #求交集 {1, 3, 5, 7}
(2)字典是集合的一种特殊类型,其键值必须为不可变类型。不可变类型包括int/float/bool/str/tuple。
二、变量与运算符
1、值类型和引用类型:
>>> a=1 #在内存中创建常量(不可变对象)1,并把它内存地址赋值给变量a
>>> b=a #把a的值赋给b,即把b的指向也指向之前1的内存地址
>>> a=3 #新建的一个常量3,并把它内存地址赋值给变量a
>>> b #此时b依然指向1的内存
1
>>> a=[1,2,3] #在内存中创建数组,把其内存地址赋给a
>>> b=a #把a的值赋给b,即把b的指向也指向之前数组的内存地址
>>> a[0]=6 #把a指向数组的第一个元素改变值
>>> b #自然b指向的内容也改变了
[6, 2, 3]
>>> a=[2,3,4] #在内存中新建一个数组,把其内存地址赋给a
>>> b #b不会改变,因为还指向原来的内存
[6, 2, 3]
值类型在python中即不可改变对象,包括数值、字符串、元组。
引用类型包括数组、字典、集等。
2、逻辑运算符
对于一般的与、或运算都比较好理解。需要注意一些特殊情况:
>>> 0 or 2 2 #结果为2,而不是False
这是因为对于or运算,当第一个操作数为0或者False、None等空对象时,解释器直接就以后面的操作数为准作为结果输出了。再如下例也是如此:
>>> None or 3
3
>>> False or [1,2,3]
[1, 2, 3] >>> 0 or '' ''
类似的,and运算时也是如此,当第一个操作数为1或True或其他非空对象时,直接以后面操作数作为结果输出:
>>> 2 and 3
3
>>> '1' and []
[]
>>> [1] and 0 0
>>> a=3
>>> b=5
>>> c=9
>>> a or b and c
3
#首先因为and运算符优先于or,所以先计算b and c,这步结果为9
#接下来就等于计算a or 9
#因为a非0非空,所以直接就以a的值作为结果