一、基本数据类型
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的值作为结果