Q:Python中的列表和元组有什么区别?
A:
Q:python是否区分大小写?
是。Python是一种区分大小写的语言。
Q:什么是Python中的类型转换?
类型转换是指将一种数据类型转换为另一种数据类型。
int() - 将任何数据类型转换为整数类型
float() - 将任何数据类型转换为float类型
ord() - 将字符转换为整数
hex() - 将整数转换为十六进制
oct() - 将整数转换为八进制
tuple() - 此函数用于转换为元组。
set() - 此函数在转换为set后返回类型。
list() - 此函数用于将任何数据类型转换为列表类型。
dict() - 此函数用于将顺序元组(键,值)转换为字典。
str() - 用于将整数转换为字符串。
complex(real,imag) - 此函数将实数转换为复数(实数,图像)数。
Q:Python数组和列表有什么区别?
Python中的数组和列表具有相同的存储数据方式。但是,数组只能包含单个数据类型元素,而列表可以包含任何数据类型元素。
Q:Python中的函数是什么?
函数是一个代码块,只有在被调用时才会执行。要在Python中定义函数,需要使用def关键字。
Q:什么是__init__?
__init__是Python中的方法或者结构。在创建类的新对象/实例时,将自动调用此方法来分配内存。所有类都有__init__方法。
Q:什么是lambda函数?
lambda函数也叫匿名函数,该函数可以包含任意数量的参数,但只能有一个执行操作的语句。
lambda 参数列表 : 表达式
fn1 = lambda a, b: a + b
print(fn1(1, 2))3
Q:Python中的self是什么?
self是类的实例或对象。在Python中,self包含在第一个参数中。
Q:区分break,continue和pass?
A:
Q:[:: - 1}表示什么?
[:: - 1]用于反转数组或序列的顺序。
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(a[:: - 1])
"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
['g', 'f', 'e', 'd', 'c', 'b', 'a']
Process finished with exit code 0
Q:如何在Python中随机化列表中的元素?
用shuffle函数
from random import shuffle
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
shuffle(a)
print(a)
Q:什么是python迭代器?
迭代器是可以遍历或迭代的对象。
Q:如何在Python中生成随机数?
random模块是用于生成随机数的标准模块。
random.random()方法返回[0,1]范围内的浮点数。该函数生成随机浮点数。随机类使用的方法是隐藏实例的绑定方法。可以使用Random的实例来显示创建不同线程实例的多线程程序。其中使用的其他随机生成器是:
randrange(a,b):它选择一个整数并定义[a,b]之间的范围。它通过从指定范围中随机选择元素来返回元素。它不构建范围对象。
uniform(a,b):它选择一个在[a,b)范围内定义的浮点数
normalvariate(mean,sdev):它用于正态分布,其中mean是平均值,sdev是用于标准偏差的sigma。
使用和实例化的Random类创建一个独立的多个随机数生成器。
import random
print(random.random())
print(random.randrange(0, 10))
print(random.uniform(1, 10))
print(random.normalvariate(3, 1))
"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
0.9790721244086154
4
7.254356562873354
2.295052144565066
Process finished with exit code 0
Q:range&xrange有什么区别?
在大多数情况下,xrange和range在功能方面完全相同。它们都提供了一种生成整数列表的方法,唯一的区别是range返回一个Python列表对象,x range返回一个xrange对象。这就表示xrange实际上在运行时并不是生成静态列表。它使用称为yielding的特殊技术根据需要创建值。该技术与一种称为生成器的对象一起使用。因此如果你有一个非常巨大的列表,那么就要考虑xrange。
Q:如何在python中写注释?
#字符开头,或者使用三重引号包含字符串进行注释。
Q:python中的生成器是什么?
返回可迭代项集的函数称为生成器。
Q:你如何把字符串的第一个字母大写?
在Python中,capitalize()函数可以将字符串的第一个字母大写。如果字符串在开头已经包含大写字母,那么它将返回原始字符串。
print('abcdefg'.capitalize())
print('Abcd'.capitalize())
"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
Abcdefg
Abcd
Process finished with exit code 0
Q:如何将字符串转换为全大小写?
upper() 和 lower()
# 转小写
print('abcd'.lower())
print('Abcd'.lower())
print('ABCD'.lower())
# 转大写
print('abcd'.upper())
print('Abcd'.upper())
print('ABCD'.upper())
"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
abcd
abcd
abcd
ABCD
ABCD
ABCD
Process finished with exit code 0
Q:如何在python中使用三元运算符?
c = a if a < b else b
a = 5
b = 8
c = a if a < b else b
print(c)
"C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py
5
Process finished with exit code 0
Q:* args,** kwargs?
*args传递元组,**kwargs传递字典。不确定将多少个参数传递给函数的时候使用
Q:len()函数有什么作用?
len()函数可用于确定字符串,列表,数组等的长度。
Q:在Python中split(),sub(),subn()功能。
如果要修改字符串,Python的“re”模块提供了3种方法。他们是:
split() - 使用正则表达式模式将给定字符串“拆分”到列表中。
sub() - 查找正则表达式模式匹配的所有子字符串,然后用不同的字符串替换它们
# 可以使用sub()方法来进行查询和替换,sub方法的格式为:
sub(replacement, string[, count=0])
# replacement是被替换成的文本
# string是需要被替换的文本
# count是一个可选参数,指最大被替换的数量import re p = re.compile('(b|d|f)') print(p.sub('A', 'abcdefg')) print(p.sub('A', 'abcdefg', count=1)) "C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py aAcAeAg aAcdefg Process finished with exit code 0
subn() - 它类似于sub(),并且还返回新字符串。
Q:什么是负指数,功能是什么?
Python中的序列是索引的,它由正数和负数组成。积极的数字使用'0'作为第一个索引,'1'作为第二个索引,进程继续使用。
负数的索引从'-1'开始,表示序列中的最后一个索引,' - 2'作为倒数第二个索引,序列像正数一样前进。
负索引用于从字符串中删除任何换行符,并允许该字符串除了作为S [: - 1]给出的最后一个字符。负索引还用于显示索引以正确的顺序表示字符串。
Q:什么是Python包?
Python包是包含多个模块的命名空间。
Q:如何在Python中删除文件?
导入OS模块,然后os.remove()
Q:python的内置类型?
整型、浮点型、复数、字符串、布尔等。
Q:如何将值添加到python数组?
可以使用append(),extend()和insert(i,x)函数将元素添加到数组中。
Q:如何删除python数组的值?
可以使用pop()或remove()方法删除数组元素。这两个函数之间的区别在于前者返回已删除的值,而后者则不返回。
Q:深拷贝(deepcopy)和浅拷贝(copy)有什么区别?
在创建新实例类型时使用浅拷贝,并保留在新实例中复制的值。浅拷贝用于复制引用指针,就像复制值一样。这些引用指向原始对象,并且在类的任何成员中所做的更改也将影响它的原始副本。浅拷贝允许更快地执行程序,它取决于所使用的数据的大小。
深拷贝用于存储已复制的值。深拷贝不会将引用指针复制到对象。它引用一个对象,并存储一些其他对象指向的新对象。原始副本中所做的更改不会影响使用该对象的任何其他副本。由于为每个被调用的对象创建了某些副本,因此深拷贝会使程序的执行速度变慢。
Q:一行代码实现1--100之和
print(sum(range(1, 101)))
Q:如何在一个函数内部修改全局变量
利用global 修改全局变量
Q:列出5个python标准库
os:提供了不少与操作系统相关联的函数
sys: 通常用于命令行参数
re: 正则匹配
math: 数学运算
datetime:处理日期时间
Q:字典如何删除键和合并两个字典
del和update方法
dic = {'a': 'aaa', 'b': 'bbb'} del dic['b'] print(dic) dic2 = {'c': 'ccc'} dic.update(dic2) print(dic) "C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py {'a': 'aaa'} {'a': 'aaa', 'c': 'ccc'} Process finished with exit code 0
Q:python实现列表去重的方法
先转为集合再转回列表
list = [1, 2, 3, 3, 4, 5, 66, 66, 7, 88, 9] a = set(list) print(a) b = [i for i in a] print(b) "C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py {1, 2, 3, 4, 5, 66, 7, 9, 88} [1, 2, 3, 4, 5, 66, 7, 9, 88] Process finished with exit code 0
Q:python2和python3的range(100)的区别
python2返回列表,python3返回迭代器,节约内存
Q:一句话解释什么样的语言能够用装饰器?
函数可以作为参数传递的语言,可以使用装饰器
Q:面向对象中__new__和__init__区别
__init__是初始化方法,创建对象后,就立刻被默认调用了
1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。
Q:简述with方法打开处理文件帮我我们做了什么?
打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open
写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close
Q:列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
map()函数第一个参数是fun,第二个参数是一般是list,第三个参数可以写list,也可以不写,根据需求
list = [1, 2, 3, 4, 5] def fn(i): return i ** 2 res = map(fn, list) a = [i for i in res if i > 10] print(a) "C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py [16, 25] Process finished with exit code 0
Q:python中断言方法举例
assert()方法,断言成功,则程序继续执行,断言失败,则程序报错
a = 1
assert(a>2)
Q:列出python中可变数据类型和不可变数据类型,并简述原理
不可变数据类型:数值型、字符串型string和元组tuple
不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),如下图用id()方法可以打印对象的id
可变数据类型:列表list和字典dict;
允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
Q:求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表
list = [1, 2, 3, 4, 5, 6, 7, 8, 9] def fn(i): return i % 2 == 1 res = filter(fn, list) a = [i for i in res] print(a) "C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py [1, 3, 5, 7, 9] Process finished with exit code 0
Q:列表推导式求列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] a = [i for i in list if i % 2 == 1] print(a) "C:\Program Files\Python37\python.exe" F:/python/pythonTest/test.py [1, 3, 5, 7, 9] Process finished with exit code 0
re.compile是将正则表达式编译成一个对象,加快速度,并重复使用
Q:a=(1,)b=(1),c=("1") 分别是什么类型的数据?
a元组,b int, c str
你会怎么设计数据库
- 存储管理模块
处理数据不能在磁盘上做,肯定是让程序加载到程序空间所在的内存中去做,磁盘IO速率往往是程序执行速度的主要瓶颈。- 缓存机制
为了更快、更好的优化我们的程序,要引入缓存机制。下次直接从内存中返回,而不用发生I/O操作。- sql解析模块
还需要能提供给外部指令,来操作我们的数据库,即可读的sql语言,那么我们需要一个sql解析模块,来将我们的sql编译、解析,转变为机器可识别的指令。这个时候如果想提高我们sql执行的效率,怎么办?还是将sql缓存到我们的缓存中,把sql编译好,方便下次过来直接进行解析。
可以看到,我们在设计程序的时候,要先考虑功能,然后再进行性能优化。
要注意:我们的缓存不宜过大,而且算法里面要有淘汰机制。- 日志管理
做的sql操作,需要记录下来,方便我们做数据库的主从同步,或者灾难恢复。因此需要日志管理办法,如binlog- 权限划分
对操作进行权限划分- 容灾机制
设计系统的时候除了考虑正常的情况,也要考虑异常的情况,那就是容灾机制
对性能提升,最重要的两个模块
- 索引管理
优化数据查询效率- 锁管理
数据库支持并发操作
二叉树根节点到叶子节点和为指定值的路径
- 可以将问题转化为二叉树的先序遍历;
- 在遍历一条路径时,每遍历一个节点,就把当前节点的值加入到路径和中;
- 假如到叶子节点的时候所求的路径和等于sum值那么就把当前这条路径的节点加入到结果集res中。
数组中找出重复的值
解法一:先对数组进行排序,然后再遍历数组,查看相邻元素是否重复;
解法二:开辟一个新数组B,每次扫描源数组A中的元素,如果不在B中,就加入B中,如果在B中,就找到一个重复的元素