一、填空题
(一)、基础知识
1.Python安装扩展库常用的是__pip__工具。
2.Python标准库math中用来计算平方根的函数是___sqrt___。
3.Python程序文献扩展名重要有__py__和__pyw__两种,其中后者常用于GUI程序(一种使用图形方式显示的计算机操作环境用户接口)。
4.Python源代码程序编译后的文献扩展名为__pyc___。
5.使用pip工具升级科学计算扩展库numpy的完整命令是__pip install --upgrade numpy____。
6.使用pip工具查看当前已安装的Python扩展库的完整命令是__pip list 或 pip freeze__。(pip freeze 通常用于打包环境)
7.在Python中__None__表达空类型。
8.列表、元组、字符串是Python的___有序___(有序?无序)序列。
9.查看变量类型的Python内置函数是____type()____。
10.查看变量内存地址的Python内置函数是___id()____。
12、以3为实部4为虚部,Python复数的表达形式为__3+4j__或__3+4J__。
13、Python运算符中用来计算整商的是___//___。(//整除,向下取整,往小的取,负数也是,如-3//2结果为-2;math.ceil()向上,math.floor(向下,round四舍六入五凑偶,若最后一位是5,则看前一位是奇数还是偶数,奇数向上取整成偶数,偶数向下取整还是偶数))
14、Python运算符中用来计算集合并集的是__|__。(|并集,&交集,-差集(表示只在第一个集合出现的元素),^对称差集(表示两个集合中都只出现过一次的元素))
A = {1, 2, 3} B = {2, 3, 4} print(A-B) # {1} print(A^B) # {1,4} # 并集 C = A | B C = A.union(B) # 交集 D = A & B D = A.intersection(B) # 差集 E = A - B E = A.difference(B) # 对称差集 F = A ^ B F = A.symmetric_difference(B)
15、使用运算符测试集合包含集合A是否为集合B的真子集的表达式可以写作____B>A___。(指向小的(真子集,A集合的每一个元素B集合都有))
16、__del__命令既可以删除列表中的一个元素,也可以删除整个列表。
17、表达式 int('123', 16) 的值为____291___。(将十六进制的字符串123转化为十进制整数)
18、表达式 int('123', 8) 的值为____83___。(将八进制的字符串'123'转化为10进制整数)
# 八进制转十进制(其他进制转十进制也是此逻辑) """ 将八进制数中的每一位数字乘以8的相应次幂,从右往左依次为0次幂、1次幂、2次幂,以此类推。 将每一步得到的结果相加,即为所求的十进制数。 例如,将八进制数 123 转换为十进制数: 3*8**0+2*8**1+1*8**2=83 """ # 十进制转八进制(十进制转其他进制也是此逻辑,转16进制就除以16) """ 将十进制数除以8,得到商和余数。 将余数记录下来,然后将商作为新的被除数,重复步骤1,直到商为0为止。 将记录下来的余数倒序排列,即为所求的八进制数。 例如,将十进制数796转换成八进制数: 796 ÷ 8 = 99 ... 4 99 ÷ 8 = 12 ... 3 12 ÷ 8 = 1 ... 4 1 ÷ 8 = 0 ... 1 所以,796的八进制表示为1434。 如果要进行八进制和十六进制之间的转换,可以借助十进制或者二进制完成。
进制转换总结:
任何进制转10进制,每个数字按位与进制数相乘,然后相加得结果
10进制转任何其他进制,除以要转的进制数,商为0为止,倒序取余
8进制或16进制转2进制,8进制数每一位对应3位2进制,16进制则对应4位2进制 """19、表达式 int('123') 的值为___123___。(int(x,base=10),int()函数可以将一个字符串转换为整数,它的第一个参数是要转换的字符串,第二个参数是字符串所表示的进制数,默认是10进制,int最终就是将数字转化成十进制的整数)
20、表达式 int('101',2) 的值为___5___。(将二进制的123转化为十进制数),表达式int('0b100', base=0)的值为___4___。
python int('0b100', base=0)的执行过程如下: 第一个参数为字符串,以"0b"开头,表示二进制数字100。 第二个参数为0,表示根据字符串的字面值来判断进制。 根据字符串字面值判断进制为二进制。 将二进制数字100转换为十进制数字4,返回整数4。
int函数的第一个参数如果是字符串,则必须满足:
- 字符串只包含数字字符,如
"123"
- 字符串以加号或减号开头,后面跟着数字字符,如
"+123"
,"-456"
- 字符串以"0x"或"0X"开头,后面跟着十六进制数字字符,如
"0x1a"
,"0X2B"
- 字符串以"0o"或"0O"开头,后面跟着八进制数字字符,如
"0o17"
,"0O27"
- 字符串以"0b"或"0B"开头,后面跟着二进制数字字符,如
"0b101"
,"0B111"
21、表达式 abs(-3) 的值为__3___。(abs为绝对值计算)
22、Python 3.x语句 print(1, 2, 3, sep=':') 的输出结果为__1:2:3___。(sep表示间隔符号,默认为一个空格符号)
23、表达式 int(4**0.5) 的值为___2____。(平方根)
24、Python内置函数__len()__可以返回列表、元组、字典、集合、字符串以及range对象中元素个数。
25、Python内置函数__max()___用来返回序列中的最大元素。
26、Python内置函数__min()__用来返回序列中的最小元素。
27、Python内置函数__sum()___用来返回数值型序列中所有元素之和。
28、为了提高Python代码运行速度和进行适当的保密,可以将Python程序文献编译为扩展名___pyc___的文献。
29、已知 x = 3,那么执行语句 x += 6 之后,x的值为____9___。(x=x+6)
30、表达式 3 | 5 的值为__7__。(在Python中,
|
表示按位或运算符,即将两个数的二进制相同位数上的数进行或运算,相同位数上两个数都为0时,结果为0,否则为1。3的二进制为11,5的二进制为101,进行或运算为111,结果为7)31、表达式 3 & 6 的值为___2___。(&表示按位与运算符,对两个数二进制的每一位进行与操作,如果两个相应位都为1,则该位的结果为1,否则为0)
a = 10 # 10的二进制为1010 b = 18 # 18的二进制为10010 c = a & b # 二进制的相与结果为0010,即2 print(c) # 输出2
32、表达式 3 ** 2 的值为___9__。
33、表达式 3 * 2的值为___6___。
34、表达式 3<<2 的值为___12___。(在Python中,3<<2是位运算符,表示将3的二进制数向左移动2位,即将二进制数11(3的二进制数)向左移动2位变成1100,然后将1100转化为十进制数,结果是12。)
35、表达式 65 >> 1 的值为_______32______。(二进制数向右移动1位)
36、表达式 chr(ord('a')^32) 的值为___'A'___。
# 计算原理: """ 1.计算 'a' 的 ASCII 码值:使用 ord() 函数可以将字符转换为 ASCII 码值,因此 ord('a') 的结果是 97。 2.对 ASCII 码值进行异或操作:使用 ^ 运算符可以对两个数进行异或操作。在这里,将 97 和 32 进行异或操作,即 97 ^ 32,得到的结果是 65。 3.将异或操作的结果转换为字符:使用 chr() 函数可以将 ASCII 码值转换为对应的字符。因此,chr(65) 的结果是 'A'。 """
37、表达式 chr(ord('a')-32) 的值为__'A'__。
38、表达式 abs(3+4j) 的值为___5.0____。(
abs()
函数可以用来获取数字的绝对值,包括整数、浮点数和复数。当传递一个复数作为参数传递给abs()
函数时,它将返回该复数的大小,也就是原点(0,0)与复平面上的点(3,4)---(a,b)之间的距离,即复数的模。)39、表达式 callable(int) 的值为___True____。(callable()函数用于检查一个对象是否是可调用的)
40、假设有Python程序文献abc.py,其中只有一条语句print(__name__),那么直接运行该程序时得到的结果为___main___。(__main__)
"""
__name__是Python的一个特殊变量,它通常用于判断当前模块是被导入还是被直接运行。当一个模块被直接运行时,Python会把__name__赋值为__main__,否则__name__的值为模块名。 这是一个常见的用法,可以使模块在被导入时不执行一些不必要的代码,而只在被直接运行时一些代码才执行。
在一个脚本或模块中,这个变量的值是__main__
,而在被导入的模块中,这个变量的值是模块的名称 """41、表达式16**0.5的值为___4.0____。(计算平方根,python中可以使用pow(x,y)计算,即pow(16,0.5);或者sqrt计算,即sqrt(16))
42、表达式type({3})的值为____set____。
43、表达式isinstance('Hello world', str)的值为____True____。
44、表达式 10^12 的值为__6__。(在python中^是计算二进制的异或操作符号,异或操作是一种位运算,即对两个二进制数进行操作,当二进制位相同时,结果为0,不同时,结果为1。)
(二)、python序列
45、表达式[1, 2, 3]*3的执行结果为________([1, 2, 3, 1, 2, 3, 1, 2, 3])______________。
46、list(map(str, [1, 2, 3]))的执行结果为________[‘1’, ‘2’, ‘3’]_____________。(map函数接收一个函数和可迭代对象,将对象里的每个元素带入函数中执行并得到结果,map返回一个迭代器,list将迭代器转化为列表)
47、语句x = 3==3, 5执行结束后,变量x的值为______(True, 5)_______。
# 执行原理 """ 1.首先进行编译,python将代码编译成字节码 2.然后进行解释(执行编译后的字节码),python会将栈顶的两个元素True,5弹出,然后将他们打包成元组对象入栈,最终栈顶元素是一个元组对象,将其赋值给x """48、表达式 False+1 的值为______1____。
49、表达式[3] in [1, 2, 3, 4]的值为______False_____。
50、列表对象的sort()方法用来对列表元素进行原地排序,该函数返回值为 None 。(sort()是对源列表进行排序更改返回值为None,而sorted()不会对源列表进行更改,会返回一个新的排序后的对象)
51、假设列表对象aList的值为[3, 4, 5, 6, 7, 9, 11, 13, 15, 17],那么切片aList[3:7]得到的值是_________[6, 7, 9, 11]___________。(包前不包后)
52、使用列表推导式生成包含10个数字5的列表,语句可以写为_____[5 for i in range(10)]__________。(列表推导式通常包含三个部分:循环次数、想插入的值、判断是否插入的条件。如[x**2 for x in range(-5, 5) if x >= -2])
53、假设有列表a = ['name', 'age', 'sex']和b = ['Dong', 38, 'Male'],请使用一个语句将这两个列表的内容转换为字典,并且以列表a中的元素为“键”,以列表b中的元素为“值”,这个语句可以写为_________c = dict(zip(a, b))____________。(zip,map,filter,reduce,reversed都是返回的对象,需要调用内置的数据类型方法转换,方便我们使用)
补充知识:
""" exec 与eval 对于字符串,exec 可以执行python代码,eval可以执行计算结果 """ print(eval("8+5")) func = "def fact(n):\n\treturn 1 if n==1 else n*fact(n-1)" exec(func) a = fact(5) print(a)55、Python语句list(range(1,10,3))执行结果为_________[1,4,7]__________。(
range(start, stop, step)
函数可以创建一个整数列表,其中start
表示起始位置,stop
表示结束位置(不包括stop
),step
表示步长,默认为 1)56、表达式 list(range(5)) 的值为_______[0, 1, 2, 3, 4]_________。
57、已知a = [1, 2, 3]和b = [1, 2, 4],那么id(a[1])==id(b[1])的执行结果为_____True______。
# 执行原理: """ 因为Python为了提高运算速度,对于小的整数、短的字符串、空的元组等对象,会进行缓存处理。这些对象的缓存区域叫做“小整数池”或“字符串池”。对于整数而言,Python会缓存-5~256之间的整数。当我们创建一个整数时,Python会首先查看这个整数是否在缓存中,如果在,就返回缓存中的对象的引用,否则就创建一个新的对象。因此,对于a[1]和b[1]这两个整数而言,它们的值相同,因此它们的id也相同。 """58、切片操作list(range(6))[::2]执行结果为______[0,2,4]__________。
59、使用切片操作在列表对象x的开始处增长一个元素3的代码为____x[0:0] = [3]_____。
# 同理: # 尾部添加 x[-1:-1] = [3] # 中间某个位置添加 x[2:2] = [3]
# 注意赋值只能是可迭代的对象,如,x[3:3] = (2,)60、语句sorted([1, 2, 3], reverse=True) == reversed([1, 2, 3])执行结果为___False______。(前部分返回列表对象,后部分返回的是迭代器对象)
61、表达式 sorted([111, 2, 33], key=lambda x: len(str(x))) 的值为______[2, 33, 111]__________。(我们可以将x理解为可迭代的每一项,通过计算每一项的长度来进行排序)
62、表达式 sorted([111, 2, 33], key=lambda x: -len(str(x))) 的值为______[111, 33, 2]______。(长度的相反数进行排序)
63、已知x=3和y=5,执行语句 x, y = y, x 后x的值是__5__。
64、可以使用内置函数_______globals()________查看包含当前作用域内所有全局变量和值的字典。(globals())
65、可以使用内置函数_________locals()__________查看包含当前作用域内所有局部变量和值的字典。(locals()()
66、python中有的内置函数的源码是pass,那么具体的源码实现位置在哪里呢?又是怎么调用的?
# 如何调用的?python解释器干了什么? """ 实际上是通过c语言实现的,由python解释器进行调用c语言实现的函数,如sorted(),虽然python源码中为pass,但是其实是调用了c语言实现的快速排序算法。Python解释器在内部维护了一个函数表,其中包含了所有内置函数的指针。当用户在Python中调用内置函数sorted时,Python解释器会根据函数名去查找这个函数表,找到对应的函数指针,然后调用这个函数指针所指向的排序函数,所以调用了c对应的函数。 在Python中,代码需要经过解释器转换成字节码,然后再执行。因此,在调用C语言排序函数的过程中,Python解释器会将该行代码转换为字节码,并将其发送给操作系统执行,而不是直接在Python解释器中执行该函数的源代码。当操作系统执行完调用C语言排序函数的代码后,它会将结果返回给Python解释器。Python解释器将结果转换成Python对象并将其返回给你的程序,你不需要关心底层的实现细节,只需要知道如何正确地使用Python API来调用C语言函数即可。在Python中,可以使用ctypes模块或Cython等工具,以便更方便地与C语言交互并调用C函数。 """67、字典对象的______get()_____方法可以获取指定“键”相应的“值”,并且可以在指定“键”不存在的时候返回指定值,假如不指定则返回None。
68、字典对象的______items()_______方法返回字典中的“键-值对”列表。
69、字典对象的_____keys()_______方法返回字典的“键”列表。
70、字典对象的________values()______方法返回字典的“值”列表。
71、已知 x = {1:2},那么执行语句 x[2] = 3之后,x的值为______{1: 2, 2: 3}__________。
72、表达式 {1, 2, 3, 4} - {3, 4, 5, 6}的值为_________{1, 2}_________。(做差集)
73、表达式set([1, 1, 2, 3])的值为__________{1,2,3}__________。
74、使用列表推导式得到100以内所有能被13整除的数的代码可以写作_____________[i for i in range(100) if i %13 == 0]______________________。
75、已知 x = [3, 5, 7],那么表达式 x[10:]的值为_______[]_____。
""" 原理: 具体来说,x[10:] 的操作可以分解成以下两个步骤: 获取下标为 10 的元素,由于列表中只有三个元素,因此该操作会返回 IndexError 异常; 对于步骤 1 中产生的异常,Python 不会报错,而是返回一个空列表。 即Python 中的切片操作不会引发索引越界错误 """76、已知 x = [3, 5, 7],那么执行语句 x[len(x):] = [1, 2]之后,x的值为______[3, 5, 7, 1, 2]________。
77、已知 x = [3, 7, 5],那么执行语句 x.sort(reverse=True)之后,x的值为_______[7, 5, 3]__________。
80、已知 x = [3, 7, 5],那么执行语句 x = x.sort(reverse=True)之后,x的值为____None_____。
81、已知 x = [1, 11, 111],那么执行语句 x.sort(key=lambda x: len(str(x)), reverse=True) 之后,x的值为______[111, 11, 1]____________。
82、表达式 list(zip([1,2], [3,4])) 的值为__________[(1, 3), (2, 4)]______________。(zip返回迭代器对象,list调用iter,next生成到列表中)
83、表达式 list(map(list,zip(*[[1, 2, 3], [4, 5, 6]]))) 的值为_______[[1, 4], [2, 5], [3, 6]]_________。(*为拆包列表,实际将列表分成两分,即zip([1,2,3],[4,5,6]),得到里面元素是三个元组,再将每一项元组转化成列表)
""" 什么是拆包? 将一个可迭代对象中的元素赋给多个变量的过程: 序列解包:将一个序列(列表、元组等)中的元素分别赋值给多个变量。 字典解包:将一个字典中的键值对分别赋值给多个变量。 """ # 将一个元组中的元素分别赋值给多个变量 x, y, z = (4, 5, 6) print(x) # 输出:4 print(y) # 输出:5 print(z) # 输出:6 # 在循环中使用序列解包 my_list = [(1, 'a'), (2, 'b'), (3, 'c')] for number, letter in my_list: print(number, letter) # 使用字典解包来遍历字典的键值对 for key, value in my_dict.items(): print(key, value) # 使用*和**拆包可迭代对象,将可迭代对象(例如列表、元组或字典)解压成单独的元素: # *操作符通常用于解压可迭代对象到函数的参数列表中。例如: def myfunc(a, b, c): print(a, b, c) mylist = [1, 2, 3] myfunc(*mylist) #此外,*操作符也可以用于在列表、元组和集合等可迭代对象之间进行拆包操作。例如: mylist1 = [1, 2, 3] mylist2 = [4, 5, 6] mylist3 = [*mylist1, *mylist2] print(mylist3) # **操作符用于解压字典到关键字参数中。例如: def myfunc(a, b, c): print(a, b, c) mydict = {'a': 1, 'b': 2, 'c': 3} myfunc(**mydict) # 与myfunc(a=1, b=2, c=3)相同的结果。 """ print(**mydict)报错,因为将mydict中的元素作为关键字参数传给print函数,有问题 """
# 在字典中拆包,表示合并;函数中拆包表示关键字传参
{'x': 1, **{'y': 2}} -> {'x': 1, 'y': 2}84、表达式 [x for x in [1,2,3,4,5] if x<3] 的值为_________[1,2]____________。
85、表达式 [index for index, value in enumerate([3,5,7,3,7]) if value == max([3,5,7,3,7])] 的值为________[2, 4]__________。
86、已知 x = [3,5,3,7],那么表达式 [x.index(i) for i in x if i==3] 的值为______[0,0]________。(x.index()找到第一个元素直接返回了)
87、已知列表 x = [1, 2],那么表达式 list(enumerate(x)) 的值为_______[(0, 1), (1, 2)]________。
88、已知 vec = [[1,2], [3,4]],则表达式 [col for row in vec for col in row] 的值为__________[1, 2, 3, 4]________________。
89、已知 vec = [[1,2], [3,4]],则表达式 [[row[i] for row in vec] for i in range(len(vec[0]))] 的值为___________[[1, 3], [2, 4]]______________。
90、已知 x = list(range(10)),则表达式 x[-4:] 的值为____[6, 7, 8, 9]______。(索引-4到后面,不是到前面)
91、已知 x = [3, 5, 7],那么执行语句 x[1:] = [2]之后,x的值为______[3,2]__________。(x[1:]包含最后一个元素,x[1:2]不包含,x[1:]为可迭代对象,更改值也得是可迭代对象,不能是整数)
92、已知 x = [3, 5, 7],那么执行语句 x[:3] = [2]之后,x的值为_______[2]_________。(切片不会报错,只是会返回空列表)
93、已知x为非空列表,那么执行语句y = x[:]之后,id(x[0]) == id(y[0])的值为____True______。(相当于浅复制,列表嵌套的里层列表与原列表引用同一个对象,值同步;外层的列表全新复制,与原列表无关,但是刚开始引用的还是原列表中的对象地址)
""" 使用y = x[:]时,实际上是将x中的所有元素复制到了一个新的列表y中,那么x和y为不同的内存地址,两者之间并无关系,修改y中元素不会对x中的元素造成影响。但在不修改y元素前,y中元素的内存地址(id(y[0]))与x中对应的元素地址相同,原因是在复制时,y中元素是对x中的元素的引用,指向的是同一个内存地址。当对y[0]重新赋值时,重新分配内存空间,内存地址指向改变,id值变 这种情况只适用于可变对象,例如列表、字典等。如果x是一个不可变对象,例如字符串或者元组。
"""
python不可变对象:数字类型:int、float,complex;tuple;str;frozenset(不可变集合)
变量赋值逻辑:
1.变量本质上是指向对象的指针。在Python中,变量名实际上只是内存中一个保存了指向某个对象的地址的名称。2.Python中的垃圾回收机制会自动管理内存,当某个对象没有任何变量名指向它时,该对象将被垃圾回收器回收。这意味着,在编写代码时,我们不需要手动释放内存。
94、已知 x = [1, 2, 3, 2, 3],执行语句 x.remove(2) 之后,x的值为_____[1,3,2,3]_______。(remove()跟具体的值,不是索引)
95、表达式 len([i for i in range(10)]) 的值为_____10_____。
96、表达式 len(range(1,10)) 的值为______9_______。
97、表达式 range(10)[-1] 的值为_______9_____。(range返回的可迭代对象可以跟索引)
98、表达式 range(10,20)[4] 的值为______14____。
99、表达式 round(3.4) 的值为_____3______。
""" round()函数会将结果四舍五入为偶数最近的数字;是Python中一个用于近似数值计算的有用工具 """ round(4.5) # 4 round(5.5) # 6 # round(x, n=0):将x四舍五入到小数点后n位,如果n未提供,则默认为0。 round(3.14159, 2) # 四舍五入到小数点后2位,3.14 """ round()函数不仅适用于浮点数,也适用于其他任何数字类型(如整数、分数等)。 当ndigits参数为负数时,它表示要将number四舍五入到小数点左边的位数。例如,round(12345, -2)将返回12300,因为它是四舍五入到百位。 """
103、已知 x = (3,),那么表达式 x * 3 的值为_____(3, 3, 3)________。
104、假设列表对象x = [1, 1, 1],那么表达式id(x[0]) == id(x[2])的值为_______True______。
""" python中列表、元组等,里面有相同的元素时,它们的内存地址是一样的,这叫对象的共享或引用,对其中一个元素进行更改不会影响其他相同的元素,相当于浅复制 """ b = ["a","a", "b","r","a"] print(id(b[0]) == id(b[4])) # True tu = ("a","a") print(id(tu[0]) == id(tu[1])) # True105、已知列表 x = list(range(10)),那么执行语句 del x[::2]之后,x的值为_____[1, 3, 5, 7, 9]____。(原来还有这种写法,根据切片步长来一个一个删除)
106、已知列表 x = [1, 2, 3, 4],那么执行语句 del x[1] 之后x的值为______[1, 3, 4]______。
107、表达式 [1] * 2 的值为________[1, 1]_________。
108、表达式 [1, 2] * 2 的值为______[1, 2, 1, 2]________。
109、已知列表 x = [1, 2, 3],那么执行语句 x.insert(1, 4) 只有,x的值为_____[1, 4, 2, 3]______。
110、已知列表 x = [1, 2, 3],那么执行语句 x.pop(0) 之后,x的值为____[2, 3]_____。
112、已知 x = [[1]] * 3,那么执行语句 x[0][0] = 5之后,变量x的值为_______[[5], [5], [5]]_________。(因为在列表中有列表嵌套,这里相当于浅复制,外层更改并不影响其他元素,嵌套列表里层更改则都会改变,毕竟不是深复制,浅复制复制不了里层,所以都会改)
113、表达式 list(map(lambda x: x+5, [1, 2, 3, 4, 5])) 的值为________[6, 7, 8, 9, 10]______________。
114、表达式 {1, 2, 3, 4, 5} ^ {4, 5, 6, 7} 的值为___________{1, 2, 3, 6, 7}______________。(^异或操作符执行两集合的对称差集,即组合两集合都不同时存在的元素)
115、已知 x = [1, 2, 3],那么执行语句 x[len(x)-1:] = [4, 5, 6]之后,变量x的值为_________________[1, 2, 4, 5, 6]________________。(为什么不是[1,2,[4,5,6]]呢?因为等号左边是列表,若是具体的一个元素,则是列表嵌套的形式)
116、表达式 len(range(1, 10)) 的值为______9_____。
117、已知x是一个列表对象,那么执行语句 y = x[:] 之后表达式 id(x) == id(y) 的值为_____False______。(具体的元素是True,对x元素的引用,更改就False了,这是浅复制)
118、表达式 sorted([13, 1, 237, 89, 100], key=lambda x: len(str(x))) 的值为______________[1, 13, 89, 237, 100]_____________________。
119、已知 x = {1:2, 2:3},那么表达式 x.get(3, 4) 的值为__4__。
120、已知 x = {1:2, 2:3},那么表达式 x.get(2, 4) 的值为___3___。
121、表达式 {1, 2, 3} | {3, 4, 5} 的值为__________{1, 2, 3, 4, 5}___________。(执行并集操作)
122、表达式 {1, 2, 3} | {2, 3, 4} 的值为___________{1, 2, 3, 4}___________。
123、表达式 {1, 2, 3} & {3, 4, 5} 的值为_______{3}_______。(执行交集操作)
125、表达式 {1, 2, 3} - {3, 4, 5} 的值为____{1,2}_____。(执行差集操作)
126、表达式 {1, 2, 3} < {3, 4, 5} 的值为_____False____。(
<
表示一个集合是否是另一个集合的子集,指向的为子集。集合的运算符包括|
、&
、-
、^
、<=
、<
、>=
、>
、==
和!=
。其中,|
表示集合的并集,&
表示集合的交集,-
表示集合的差集,^
表示集合的对称差集。<=
)127、表达式 {1, 2, 3} < {1, 2, 4} 的值为_____False______。
128、表达式 [1,2,3].count(4) 的值为______0_________。(count计数的原理是遍历,找到相同的元素,然后计数,每使用一遍就会遍历一次,若数组过大不宜使用,影响性能)
129、Python标准库random中的_____choice()______方法作用是从序列中随机选择1个元素。
130、Python标准库random中的sample(seq, k)方法作用是从序列中选择____不反复____(反复?不反复?)的k个元素。(用于从一个序列中随机选取指定数量的元素,且不重复的函数,如,random.sample(lst, 3),随机取lst序列的三个元素,不重复取一个值)
131、random模块中______shuffle()_______方法的作用是将列表中的元素随机乱序。(源码中是修改的原列表,没有返回值)
132、执行代码 x, y, z = sorted([1, 3, 2]) 之后,变量y的值为___2___。
133、表达式 (1, 2, 3)+(4, 5) 的值为________(1, 2, 3, 4, 5)__________。
134、表达式 dict(zip([1, 2], [3, 4])) 的值为_________________{1: 3, 2: 4}________________。
136、已知 x = [[1,3,3], [2,3,1]],那么表达式 sorted(x, key=lambda item:item[0]+item[2]) 的值为_______[[2, 3, 1], [1, 3, 3]]_____。(item表示外层列表中的每一项,不是嵌套列表里的每一项,第一项为[1,3,3]排序条件为4,第二项[2,31]排序条件为3,所以得到结果)
137、已知 x = [[1,3,3], [2,3,1]],那么表达式 sorted(x, key=lambda item:(item[1],item[2])) 的值为______[[2, 3, 1], [1, 3, 3]]__________。(
lambda
表达式定义了一个匿名函数,该函数将每个子列表作为参数,然后返回一个元组(item[1],item[2]),按照这个元组的值进行排序,最左匹配原则,若该元组最左边的值小则排在前面,若相等则比较第二个元素,小的排在前面
)138、已知 x = [[1,3,3], [2,3,1]],那么表达式 sorted(x, key=lambda item:(item[1], -item[2])) 的值为_____[[1, 3, 3], [2, 3, 1]]________。
139、已知 x = {1, 2, 3},那么执行语句 x.add(3) 之后,x的值为_____{1, 2, 3}_____。
140、已知 x = {1:1},那么执行语句 x[2] = 2之后,len(x)的值为_______2_____。
141、已知 x = {1:1, 2:2},那么执行语句 x[2] = 4之后,len(x)的值为_______2_____。
142、假设已从标准库functools导入reduce()函数,那么表达式 reduce(lambda x, y: x-y, [1, 2, 3]) 的值为__-4__。(看了源码,先将1,2两元素传入计算得-1,作为x的参数,再将3传入,作为y的参数,所以为-4)
143、假设已从标准库functools导入reduce()函数,那么表达式 reduce(lambda x, y: x+y, [1, 2, 3]) 的值为____。(6)
144、假设已从标准库functools导入reduce()函数,那么表达式reduce(lambda x,y:max(x,y), [1,2,3,4,4,5])的值为____5_____。
145、已知有函数定义 def demo(*p):return sum(p),那么表达式 demo(1, 2, 3) 的值为__6____、表达式 demo(1, 2, 3, 4) 的值为_____10____。
146、已知列表 x = [1, 2],那么连续执行命令 y = x和 y.append(3) 之后,x的值为____[1, 2, 3]____。(x存储[1,2]对象的地址,对它的引用,那么y=x,y对x的引用,实际上还是对[1,2]的引用,所以修改了原列表,与y = x[:]有区别)
147、已知列表 x = [1, 2],那么连续执行命令 y = x[:] 和 y.append(3) 之后,x的值为____[1, 2]____。(y = x[:]创建了新的空间给y,虽然刚开始y里的元素引用的是原x里的元素地址,但是当我值改变,不会影响原列表,只是不引用原列表元素,浅复制)
148、已知列表 x = [1, 2],执行语句 y = x[:] 后,表达式 id(x) == id(y) 的值为____False___。(创建新空间了,原理还是根据id()内存地址,若相同,修改元素则同步)
149、已知列表 x = [1, 2],执行语句 y = x 后,表达式 id(x) == id(y) 的值为____True___。(对x的引用)
150、已知列表 x = [1, 2],执行语句 y = x 后,表达式 x is y 的值为___True____。
151、已知列表 x = [1, 2],执行语句 y = x[:] 后,表达式 x is not y 的值为___True____。
152、表达式 sorted(random.sample(range(5), 5)) 的值为__________[0, 1, 2, 3, 4]___________。(随机选取5个不反复的元素,并进行排序)
153、表达式 [i for i in range(10) if i>8] 的值为_________[9]_______。
154、已知有列表 x = [[1, 2, 3], [4, 5, 6]],那么表达式 [[row[i] for row in x] for i in range(len(x[0]))] 的值为____________[[1, 4], [2, 5], [3, 6]]_______________。
155、执行语句 x,y,z = map(str, range(3)) 之后,变量y的值为______'1'_____。
156、已知列表 x = [1, 2],那么执行语句 x.extend([3]) 之后, x的值为_____[1,2,3]_______。
157、已知列表 x = [1, 2],那么执行语句 x.append([3]) 之后,x的值为______[1, 2, [3]]_______。
158、表达式 print(0b10101) 的值为_____21_______。(
0b10101
是一个二进制数的表示方式,前缀0b
表示接下来的数字是二进制数。Python 解释器将其解释为十进制数 21,并将其传递给print()
函数作为参数)159、已知 x = [1, 2, 3, 4, 5],那么执行语句 del x[:3] 之后,x的值为_____[4,5]_____。
160、已知 x = range(1,4) 和 y = range(4,7),那么表达式 sum([i*j for i,j in zip(x,y)]) 的值为_____32_____。(zip函数返回的是一个迭代器,它生成的元素是由x和y中的对应元素构成的元组(默认)。在本例中,生成的元组序列为(1, 4), (2, 5), (3, 6))
161、表达式 [5 for i in range(3)] 的值为_______[5,5,5]________。
162、表达式 {1, 2, 3} == {1, 3, 2} 的值为_____True______。(集合无序,元素不受顺序影响,值是相等的,所以为True;但是id不相等,所以用is则为False)
163、表达式 [1, 2, 3] == [1, 3, 2] 的值为______False______。(列表有序,只有元素和顺序一致,才相等)
164、已知 x = [1, 2, 1],那么表达式 id(x[0]) == id(x[2]) 的值为________True_______。
165、表达式 3 not in [1, 2, 3]的值为____False______。
166、已知 x = [1, 2],那么执行语句 x[0:0] = [3, 3]之后,x的值为_____[3, 3, 1, 2]______。
167、已知 x = [1, 2],那么执行语句 x[0:1] = [3, 3]之后,x的值为_____[3,3,2]______。
168、已知 x = [1, 2, 3, 4, 5],那么执行语句 del x[1:3] 之后,x的值为______[1,4,5]______。
169、已知 x = [[1, 2, 3,], [4, 5, 6]],那么表达式 sum([i*j for i,j in zip(*x)]) 的值为___32___。
170、已知列表 x = [1, 2, 3] 和 y = [4, 5, 6],那么表达式 [(i,j) for i, j in zip(x,y) if i==3] 的值为_____[3,6]_______。
171、已知列表 x = [1.0, 2.0, 3.0],那么表达式 sum(x)/len(x) 的值为_____2.0______。
172、已知 x = {1:2, 2:3, 3:4},那么表达式 sum(x) 的值为_____6______。(sum跟可迭代对象,字典就是可迭代对象,实际上是将键相加,若有键不是数字类型,那么会报错)
173、已知 x = {1:2, 2:3, 3:4},那么表达式 sum(x.values()) 的值为_____9____。(values()返回可迭代对象)
174、已知 x = [3, 2, 3, 3, 4],那么表达式 [index for index, value in enumerate(x) if value==3] 的值为_____[0,2,3]_______。
175、表达式 1234%1000//100 的值为_____2______。
176、表达式 3 // 5 的值为_______0________。(// 是向下整除;而/是普通的除法,会保留小数)
177、表达式 [1, 2] + [3] 的值为__________[1, 2, 3]________。
178、表达式 (1,) + (2,) 的值为________(1,2)_____。
179、表达式 (1) + (2) 的值为_______3_____。
180、已知 x, y = map(int, ['1', '2']),那么表达式 x + y 的值为___3____。
181、已知列表 x = list(range(5)),那么执行语句 x.remove(3) 之后,表达式 x.index(4) 的值为___3_____。(元素3删除,那么元素4的索引就为3)
182、已知列表 x = [1, 3, 2],那么执行语句 x.reverse() 之后,x的值为______[2, 3, 1]______。(reverse修改的原列表,没有返回值;reverse与reversed,sort与sorted有异曲同工之妙)
183、已知列表 x = [1, 3, 2],那么执行语句 x = x.reverse() 之后,x的值为_____None_______。
184、已知x为非空列表,那么表达式 x.reverse() == list(reversed(x)) 的值为____False______。(等号左边返回的是None,右边返回迭代器然后转化为列表,是倒序后的列表)
185、已知x为非空列表,那么表达式 x.sort() == sorted(x) 的值为_____False_____。(左边修改的是原列表,无返回值None;右边返回新列表,不对原列表修改)
186、已知列表 x = [1, 3, 2],那么执行语句 y = list(reversed(x)) 之后,x的值为_____[1, 3, 2]_____。
187、已知列表 x = [1, 3, 2],那么执行语句 y = list(reversed(x)) 之后,y的值为_____[2,3,1]_____。
188、已知列表x中包含超过5个以上的元素,那么表达式 x == x[:5]+x[5:] 的值为____True____。
189、已知字典 x = {i:str(i+3) for i in range(3)},那么表达式 sum(x) 的值为___3___。(对字典键相加)
190、已知字典 x = {i:str(i+3) for i in range(3)},那么表达式 sum(item[0] for item in x.items()) 的值为______3_____。(x.items()返回列表包含元组的对象)
191、已知字典 x = {i:str(i+3) for i in range(3)},那么表达式 ''.join([item[1] for item in x.items()]) 的值为_______'345'______。(将列表的字符串用空进行拼接)
192、已知列表 x = [1, 3, 2],那么表达式 [value for index, value in enumerate(x) if index==2] 的值为_______[2]________。
193、已知列表 x = [1, 3, 2],那么执行语句 a, b, c = sorted(x) 之后,b的值为__2__。
194、已知列表 x = [1, 3, 2],那么执行语句 a, b, c = map(str,sorted(x)) 之后,c的值为__'3'____。(虽然返回的是迭代器,但依然不影响拆包)
195、表达式 set([1,2,3]) == {1, 2, 3} 的值为_____True_______。
196、表达式 set([1,2, 2,3]) == {1, 2, 3} 的值为_____True_______。
197、表达式 '%c'%65 == str(65) 的值为______False_____。(左边将参数65传递给操作符,根据操作符的指示进行转化,转化成65对对应的ASCII码)
198、表达式 '%s'%65 == str(65) 的值为______True_______。
199、表达式 chr(ord('b')^32) 的值为____'B'_____。(前面有计算例子)
200、表达式 'abc' in 'abdcefg' 的值为______False_______。(得连贯)
201、已知x为整数变量,那么表达式 int(hex(x), 16) == x 的值为______True_______。(x本就是十进制数,转化为十六进制后,又使用int转化为十进制数,所以相等)
202、已知 x, y = 3, 5,那么执行x, y = y, x 之后,x的值为______5____。
203、已知 x = 'abcd' 和 y = 'abcde',那么表达式 [i==j for i,j in zip(x,y)] 的值为_______[True, True, True, True]_________。(zip多出来的项不做对应)
204、已知x = list(range(20)),那么表达式x[-1]的值为_________19___________。
205、已知x = 3+4j和y = 5+6j,那么表达式x+y的值为__________8+10j__________。(虚数与虚数相加,实数与实数相加)
206、已知x = [3],那么执行x += [5]之后x的值为__________[3, 5]__________。
207、已知x = [3, 3, 4],那么表达式id(x[0])==id(x[1])的值为_________True_________。
208、表达式int('11', 2)的值为___________3___________。('11'为二进制数,int函数转化为十进制数,结果为3)
209、表达式int('11', 8)的值为___________9____________。
210、表达式int(bin(54321), 2)的值为___________54321____________。(
bin(54321)
返回一个字符串,表示十进制数 54321 的二进制形式,第二个参数设置为 2,表示将这个字符串解释为二进制数,执行int函数返回这个二进制数的十进制表示,为54321)211、表达式chr(ord('A')+1)的值为__________'B'__________。
212、表达式int(str(34)) == 34的值为_________True__________。
213、表达式list(str([3, 4])) == [3, 4]的值为________False_________。(将[3, 4]转化成字符串后,再转化成列表,'[',',',']'也是字符串的一部分,会成为列表中的元素,结果为['[', '3', ',', ' ', '4', ']'])
214、表达式{1, 2, 3, 4, 5, 6} ^ {5, 6, 7, 8}的值为________{1, 2, 3, 4, 7, 8}__________。(对称差集,只存在一边的元素集合)
215、表达式15 // 4的值为_________3_________。
216、表达式sorted({'a':3, 'b':9, 'c':78})的值为________['a', 'b', 'c']_________。(由于字典没有索引,所以没有顺序,所以当我们使用sorted()函数来对字典进行排序时,它只能返回字典中所有键的有序列表,而不能同时保留键和值的对应关系,若要保留键值对,可以使用items(),转化为元组进行排序)
d = {'a': 3, 'b': 9, 'c': 78} sorted_tuples = sorted(d.items(), key=lambda x: x[0]) # 对元组列表进行排序,key指定排序依据为元组中的第一个元素(即键) print(sorted_tuples) # [('a', 3), ('b', 9), ('c', 78)]
dict(sorted_tuples) # 两两元素的情况直接转成字典217、表达式sorted({'a':3, 'b':9, 'c':78}.values())的值为______[3, 9, 78]_______。(values()返回可迭代对象)
218、已知x = [3, 2, 4, 1],那么执行语句x = x.sort()之后,x的值为_____None_______。
219、表达式list(filter(lambda x: x>5, range(10)))的值为________[6, 7, 8, 9]_________。
220、已知x = list(range(20)),那么语句print(x[100:200])的输出结果为_______[]________。(切片不会报错,索引报错)
221、已知x = list(range(20)),那么执行语句x[:18] = []后列表x的值为______[18, 19]________。
222、已知x = [1, 2, 3],那么连续执行y = x[:]和y.append(4)这两条语句之后,x的值为________[1, 2, 3]____________。(这里为浅复制,id(x[0]) = id(y[0]),虽然是指向一个元素地址,但是xy整体并没有关联)
223、已知x = [1, 2, 3],那么连续执行y = x和y.append(4)这两条语句之后,x的值为__________[1, 2, 3, 4]__________。
224、已知x = [1, 2, 3],那么连续执行y = [1, 2, 3]和y.append(4)这两条语句之后,x的值为_________[1, 2, 3]___________。
225、已知x = [[]] * 3,那么执行语句x[0].append(1)之后,x的值为__________[[1], [1], [1]]__________。
226、已知x = [[] for i in range(3)],那么执行语句x[0].append(1)之后,x的值为_________[[1], [], []]________。
227、已知x = ([1], [2]),那么执行语句x[0].append(3)后x的值为_______([1, 3], [2])_________。
228、已知x = {1:1, 2:2},那么执行语句x.update({2:3, 3:3})之后,表达式sorted(x.items())的值为_________[(1, 1), (2, 3), (3, 3)]___________。(update将一个字典中的键值对更新到另一个字典中,重复的键覆盖)
229、已知x = {1:1, 2:2},那么执行语句x[3] = 3之后,表达式sorted(x.items())的值为__________[(1, 1), (2, 2), (3, 3)]__________。(默认根据键排序,想根据值排序可使用lambda函数)
230、已知x = [1, 2, 3],那么表达式not (set(x*100)-set(x))的值为________True________。(x*100表示[1,2,3,1,2,3,1,2,3.....])
231、已知x = [1, 2, 3],那么表达式not (set(x*100)&set(x))的值为________False________。
232、表达式{'x': 1, **{'y': 2}}的值为________{'x': 1, 'y': 2}___________。(拆包,在字典里拆包表示合并到字典中,作为函数拆包表示关键字参数)
233、表达式{*range(4), 4, *(5, 6, 7)}的值为___________{0, 1, 2, 3, 4, 5, 6, 7}_______。(可理解为*range(4)与*(5,6,7)一样,将可迭代对象解包成单个数字传入)
234、已知 x = [1,2,3,4,5],那么执行语句 x[::2] = range(3) 之后,x的值为______[0, 2, 1, 4, 2]_________。(写法很棒,使用步长更新列表中的部分值,等同于x[::2] = [0,1,2])
235、已知 x = [1,2,3,4,5],那么执行语句 x[::2] = map(lambda y:y!=5,range(3)) 之后,x的值为_________[True, 2, True, 4, True]_______。
236、已知 x = [1,2,3,4,5],那么执行语句 x[1::2] = sorted(x[1::2], reverse=True) 之后,x的值为_______[1, 4, 3, 2, 5]__________。(排序过后,步长取到x里想更改的值,倒序一下,重新对应赋值。说白了就是取到x里的值,然后对应赋值修改,修改时要跟原列表x)
237、表达式 True*3 的值为_____3_____。(True表示1)
(三)、选择结构与循环结构
239、表达式 'ab' in 'acbed' 的值为____False____。(必须是ab连在一起的才为True)
240、假设n为整数,那么表达式 n&1 == n%2 的值为______True_______。(&按位与运算,对位二进制都为1结果为1,若n为奇数,n的二进制数最后一位为1,那么n&1就为1,n%2余数也为1;同理,若n为偶数n&1和n%2都为0,所以最后结果为True)
241、关键字_____in_____用于测试一个对象是否是一个可迭代对象的元素。
242、表达式 3<5>2 的值为_______True________。
""" 首先,比较运算符<会比较左边的操作数3和右边的操作数5。由于3小于5,所以这个比较结果为True。 接下来,比较运算符>会比较左边的操作数5和右边的操作数2。由于5大于2,所以这个比较结果也为True。 因此,整个表达式3 < 5 > 2的值为True。 需要注意的是,Python中的比较运算符可以连续使用,形成链式比较。在这种情况下,比较运算符会按照从左到右的顺序进行比较,并且只有所有比较都为True时,整个表达式的值才为True。 """243、已知 x = {'a':'b', 'c':'d'},那么表达式 'a' in x 的值为______True________。(首先是键作为成员,若'b' in x则为False,'b' in x.values()为True)
247、表达式 3 or 5 的值为____3____。(or会返回第一个真值,若已经得到一个真值则返回,不会再对后面的值进行计算,若都为假,or则返回最后一个值,如:a = 0 or False or None,a的值为None)
249、表达式 3 and 5 的值为_____5_______。(and和上面的or相反,and返回第一个假值,若都为真则返回最后一个)
252、Python 3.x语句 for i in range(3):print(i, end=',') 的输出结果为_________0,1,2,____________。(结尾有个逗号)
253、Python 3.x语句 print(1, 2, 3, sep='|') 的输出结果为_______1|2|3_________。(sep表示中间的间隔,默认为一个空格,若不声明sep,结果为1 2 3)
执行print("aaaa",file="test.txt")报错AttributeError: 'str' object has no attribute 'write'-------》要声明模式”w“ print的file参数接收一个文件对象,比如,通过print写文件数据: with open("test.txt", "w") as file: print("aaaa", file=file) file = open("test.txt", mode="w") print("hello world", file=file)254、对于带有else子句的for循环和while循环,当循环因循环条件不成立而自然结束时___会_____(会?不会?)执行else中的代码。
258、Python关键字elif表达____else______和______if_____两个单词的缩写。
(四)、字符串与正则表达式
262、表达式 'abc' in ('abcdefg') 的值为______True________,表达式 'abc' in ['abcdefg'] 的值为_____False_________。(第一个表示字符串,元组需要加逗号)
264、表达式 '\x41' == 'A' 的值为______True_______。(\x表示十进制41的十六进制数所对应的ASCII字符是什么,这里41的十六进制为65,对应的ASCII是A)
265、Python语句''.join(list('hello world!'))执行的结果是_________'hello world!'___________。
267、已知列表对象x = ['11', '2', '3'],则表达式 max(x) 的值为______'3'_____。(字符串按照字符编码来进行排序(unicode或ASCII),整数则按照数值比较)
269、已知列表对象x = ['11', '2', '3'],则表达式max(x, key=len) 的值为______'11'_____。(max的key参数接收一个函数,并且根据函数的返回值进行排序)
276、表达式 '%c'%65 的值为____'A'_____。('
%c
: 用于将一个整数转换为对应的ASCII字符,并将其插入到格式化字符串中)277、表达式 '%s'%65 的值为_____'65'_____。
278、表达式 '%d,%c' % (65, 65) 的值为_____'65,A'___。(
%d
: 用于将整数插入到格式化字符串中。)280、表达式 '{0:#d},{0:#x},{0:#o}'.format(65) 的值为______'65,0x41,0o101'_______。
""" {0:#d}: 这是一个格式化占位符,表示将第一个参数(索引为0)作为十进制整数来格式化输出。由于传入的参数是65,因此该部分格式化为十进制整数65。 {0:#x}: 这也是一个格式化占位符,表示将第一个参数(索引为0)作为十六进制整数来格式化输出,并带有'0x'前缀。由于传入的参数是65,因此该部分格式化为十六进制整数0x41。 {0:#o}: 这是另一个格式化占位符,表示将第一个参数(索引为0)作为八进制整数来格式化输出,并带有'0o'前缀。由于传入的参数是65,因此该部分格式化为八进制整数0o101。 因此,整个表达式的结果为 '65,0x41,0o101'。注意,这里的前缀0x和0o分别表示十六进制和八进制的标识符。 """
282、表达式 isinstance('abcdefg', object) 的值为______True_______。(True)
283、表达式 isinstance(3, object) 的值为______True_______。(3是
int
类型的实例,而int
类型是继承自object
类型的,python的所有对象都是object类派生的,一切皆对象)
持续更新中。。。。。。