1.python新式类和经典类的区别?
    a. 在python里凡是继承了object的类,都是新式类
    b. Python3里只有新式类
    c. Python2里面继承object的是新式类,没有写父类的是经典类
    d. 经典类目前在Python里基本没有应用
    e. 保持class与type的统一对新式类的实例执行a.class与type(a)的结果是一致的,对于旧式类来说就不
    一样了。
    f.对于多重继承的属性搜索顺序不一样新式类是采用广度优先搜索,旧式类采用深度优先搜索。

    2.python中内置的数据结构有几种?
    a. 整型 int、 长整型 long、浮点型 float、 复数 complex
    b. 字符串 str、 列表 list、 元祖 tuple
    c. 字典 dict 、 集合 set
    d. Python3 中没有 long,只有无限精度的 int

    3.python如何实现单例模式?请写出两种实现方式?

    4.反转一个整数,例如-123—>-321

    1. class Solution(object):
    2. def reverse(self,x):
    3. if -10<x<10:
    4. return x
    5. str_x = str(x)
    6. if str_x[0] !="-":
    7. str_x = str_x[::-1]
    8. x = int(str_x)
    9. else:
    10. str_x = str_x[1:][::-1]
    11. x = int(str_x)
    12. x = -x
    13. return x if -2147483648<x<2147483647 else 0
    14. if __name__ == '__main__':
    15. s = Solution()
    16. reverse_int = s.reverse(-120)
    17. print(reverse_int)

    知识点:
    1.if else判断传入参数是正整数还是负整数
    2.字符串切片方式,反转字符串[::-1],输入参数若是负整数,则从索引1开始切片转换成正整数,再用[::-1]反转字符串
    3.最后将字符串转换成int,最后转换成负整数
    4.三目运算符用法:x if -2147483648exp1 if contion else exp2:
    condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。

    5.设计实现遍历目录与子目录,抓取.pyc文件

    1. import os
    2. def get_files(dir,suffix):
    3. res = []
    4. for root,dirs,files in os.walk(dir):
    5. for filename in files:
    6. name,suf = os.path.splitext(filename)
    7. if suf == suffix:
    8. res.append(os.path.join(root,filename))
    9. print(res)
    10. get_files("./",'.pyc')

    知识点:
    1.os.walk(top)方法遍历目录,top为所有遍历的目录的地址,也就是该方法的参数dir;遍历后返回的是一个三元组(root,dirs,files)
    root 所指的是当前正在遍历的这个文件夹的本身的地址
    dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
    files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
    2.os.path.splitext(path)方法拆分文件,(文件名,后缀名)
    例如:’E:\test\6.txt’ 会拆分成(‘E:\test\x06’, ‘.txt’)
    3.参数suffix为后缀名,if suf == suffix,如果拆分的后缀名等于.pyc则往res列表里去加元素(os.path.join(root,filename)把路径拼接上)

    1. import os
    2. def pick(obj):
    3. if obj.endswith(".pyc"):
    4. print(obj)
    5. def scan_path(ph):
    6. file_list = os.listdir(ph)
    7. for obj in file_list:
    8. if os.path.isfile(obj):
    9. pick(obj)
    10. elif os.path.isdir(obj):
    11. scan_path(obj)
    12. if __name__=='__main__':
    13. path = input('输入目录')
    14. scan_path(path)

    知识点:
    1.obj.endswith(“”)用于判断字符串是否以指定字符或字符串结尾,常用于判断文件类型
    例如本题用法是判断是否为”.pyc”结尾
    2.os.lisdir(path),该方法返回一个列表,其中包含指定路径下的目录和文件的名称
    3.os.path.isfile(),参数为绝对路径,判断对象是否为文件
    4.os.path.isdir(),参数为绝对路径,判断对象是否为目录

    6.一行代码实现1-100之和

    1. count = sum(range(0, 101))
    2. print(count)


    7.Python-遍历列表时删除元素的正确做法

    1. a = [1,2,3,4,5,6,7,8]
    2. print(id(a))
    3. print(id(a[:]))
    4. for i in a[:]:
    5. if i>5:
    6. ass
    7. else:
    8. a.remove(i)
    9. print(a)
    10. print('-----------')
    11. print(id(a))

    8.可变类型与不可变类型
    1.可变类型有list, dict不可变类型有string, number, tuple
    2.当进行修改操作时,可变类型传递的是内存中的地址,也就是说,直接修改内存中的值,并没有开辟新的内存
    3.当不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作。
    9.is和==有什么区别?
    is:比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象。是否指向同一个内
    存地址
    == : 比较的两个对象的内容/值是否相等,默认会调用对象的eq()方法

    10. 求出列表所有奇数并构造新列表

    1. a = [1,2,3,4,5,6,7,8,9,10]
    2. res = [ i for i in a if i%2==1]
    3. print(res)

    列表推岛式创建新列表,先遍历列表a,循环i%2==1,余数为1为奇数,最后打印新列表res
    11.用一行python代码写出1+2+3+10248

    1. print(sum[1,2,3,10248])
    1. from functools import reduce
    2. num1 = reduce(lambda x,y :x+y,[1,2,3,10248])
    3. print(num1)

    reduce函数用法:
    1.对列表中的所有元素执行function的进行累积计算,返回最终计算结果,reduce(function, iterable[, initializer]),function — 函数的引用;iterable — 列表或者可迭代对象
    function参数是一个有两个参数的函数,reduce依次从iterable中取一个元素,和上一次调用function的结果做参数再次调用function。
    第一次调用function时,如果提供initial参数,会以iterable中的第一个元素和initial作为参数调用function,否则会以序列iterable中的前两个元素做参数调用function。
    12.Python中变量的作用域?(变量查找顺序)
    函数作用域的LEGB顺序
    1.什么是LEGB?
    L: local 函数内部作用域
    E: enclosing 函数内部与内嵌函数之间
    G: global 全局作用域
    B: build-in 内置作用
    python在函数里面的查找分为4种,称之为LEGB,也正是按照这是顺序来查找的
    13. python代码实现删除一个list里面的重复元素

    1. def disFunc1(a):
    2. """使用集合去重"""
    3. a = list(set(a))
    4. print(a)
    5. def disFun2(a):
    6. list = []
    7. for i in a:
    8. if i not in list:
    9. list.append(i)
    10. list.sort()
    11. print(list)
    12. def disFun3(a):
    13. b = {}
    14. b = b.fromkeys(a)
    15. c = list(b.keys())
    16. print(c)
    17. if __name__ == "__main__":
    18. a = [1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
    19. disFun1(a)
    20. disFun2(a)
    21. disFun3(a)

    知识点:
    1.dict.fromkeys(seq[, value]) 以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值,若不传value,则value为None,且字典不支持重复键,该方法返回一个新字典。
    2.c = list(b.keys()),取该字典中的key作为列表的元素。
    14. 统计一个文本中单词频次最高的10个单词?

    1. import re
    2. # 方法一
    3. def test(filepath):
    4. distone = {}
    5. with open(filepath) as f:
    6. for line in f:
    7. line = re.sub("\W+", " ", line)
    8. lineone = line.split()
    9. for keyone in lineone:
    10. if not distone.get(keyone):
    11. distone[keyone] = 1
    12. else:
    13. distone[keyone] += 1
    14. num_ten = sorted(distone.items(), key=lambda x:x[1], reverse=True)[:10]
    15. num_ten =[x[0] for x in num_ten]
    16. return num_ten

    15.请写出一个函数满足以下条件
    该函数的输入是一个仅包含数字的list,输出一个新的list,其中每一个元素要满足以下条件:
    1、该元素是偶数
    2、该元素在原list中是在偶数的位置(index是偶数)

    1. def capper(list_one):
    2. return [i for i in list_one if i%2 == 0 and list_one.index(i)%2 == 0]
    3. list_one = [0,1,2,3,4,5,6,7,8,9,10]
    4. list_two = capper(list_one)
    5. print(list_two)
    6. n_list = [0,1,2,3,4,5,6,7,8,9,10]
    7. def saber(n_list):
    8. m_list = []
    9. for i in n_list:
    10. if i % 2 == 0 and n_list.index(i) % 2 == 0:
    11. m_list.append(i)
    12. #return m_list
    13. print(m_list)
    14. if __name__ == '__main__':
    15. saber(n_list)

    1.index是偶数,利用列表的index方法得出元素的索引,list_one.index(i)
    19.使用单一的列表生成式生成一个新的列表
    该列表只包含满足以下条件的值,元素为原始列表中偶数切片

    1. list_data = [1,2,5,8,10,3,18,6,20]
    2. res = [x for x in list_data[::2] if x % 2 == 0]
    3. print(res)

    20.用一行代码生成 [1,4,9,16,25,36,49,64,81,100]

    1. [x * x for x in range(1, 11)]

    21.输入某年某月某日,判断这一天是这一年的第几天?

    1. import datetime
    2. y = int(input("请输入4位数字的年份:"))
    3. m = int(input("请输入月份:"))
    4. d = int(input("请输入是哪一天"))
    5. targetDay = datetime.date(y,m,d)
    6. dayCount = targetDay - datetime.date(targetDay.year -1,12,31)
    7. print("%s是 %s年的第%s天。"%(targetDay,y,dayCount.days))

    22. 两个有序列表,l1,l2,对这两个列表进行合并不可使用extend

    1. def loop_merge_sort(l1, l2):
    2. tmp = [] #构造一个的新的列表
    3. while len(l1) > 0 and len(l2) > 0:
    4. if l1[0] < l2[0]: #循环每次比较第一个元素
    5. tmp.append(l1[0]) #tmp添加元素
    6. del l1[0] #l1删除一个,原有的元素自动向前移动一位
    7. else:
    8. tmp.append(l2[0])
    9. del l2[0]
    10. while len(l1) > 0: #最后会剩下两个元素,参数是不固定的,所以不知道会剩下l1还是l2
    11. tmp.append(l1[0]) #需要再判断一下l1和l2的长度,接着把剩下的元素添加进去,最后返回新列表
    12. del l1[0]
    13. while len(l2) > 0:
    14. tmp.append(l2[0])
    15. del l2[0]
    16. return tmp
    17. if __name__ == '__main__':
    18. L1=[23, 45, 67, 77, 78, 80, 90]
    19. L2=[4, 11, 26, 33, 42, 61, 80]
    20. new_list=loop_merge_sort(L1, L2)
    21. print(new_list)
    1. L1=[23,45,67,77,78,80,90]
    2. L2=[4,11,26,33,42,61,80]
    3. L1.extend(L2) #extend()是在另一个列表的尾部追加新的元素
    4. print(L1)

    23. 写一个函数找出一个整数数组中,第二大的数

    1. def find_second_large_num(num_list):
    2. """ 找出数组第2大的数字 """
    3. # 方法一 # 直接排序,输出倒数第二个数即可
    4. tmp_list = sorted(num_list)
    5. print("方法一\nSecond_large_num is :", tmp_list[-2])

    24. 阅读一下代码他们的输出结果是什么?

    1. def multi():
    2. return [lambda x : i*x for i in range(4)]
    3. print([m(3) for m in multi()])

    解析:
    正确答案是[9,9,9,9],而不是[0,3,6,9]产生的原因是Python的闭包的后期绑定导致的,这意味着在闭包
    中的变量是在内部函数被调用的时候被查找的,因为,最后函数被调用的时候,for循环已经完成, i 的
    值最后是3,因此每一个返回值的i都是3,所以最后的结果是[9,9,9,9]
    25. 统计一段字符串中字符出现的次数

    1. def count_str(str_data):
    2. """定义一个字符出现次数的函数"""
    3. dict_str = {}
    4. for i in str_data:
    5. dict_str[i] = dict_str.get(i, 0) + 1
    6. return dict_str
    7. dict_str = count_str("AAABBCCAC")
    8. str_count_data = ""
    9. for k, v in dict_str.items():
    10. str_count_data += k + str(v)
    11. print(str_count_data)