Python知识点记录一

时间:2022-01-27 00:10:27

一、基本数据类型

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的值作为结果