东莞网站托管,安徽建设工程信息网安管人员查询,制作企业网站公司排名,在哪个网站可以做二建的题目录
Python基础
文件操作
1.有一个jsonline格式的文件file.txt大小约为10K
2.补充缺失的代码
模块与包
3.输入日期#xff0c; 判断这一天是这一年的第几天#xff1f;
4.打乱一个排好序的list对象alist#xff1f;
数据类型
5.现有字典 d {a:24,g:52,i:12,k:33}请…
目录
Python基础
文件操作
1.有一个jsonline格式的文件file.txt大小约为10K
2.补充缺失的代码
模块与包
3.输入日期 判断这一天是这一年的第几天
4.打乱一个排好序的list对象alist
数据类型
5.现有字典 d {a:24,g:52,i:12,k:33}请按value值进行排序?
6.字典推导式
7.请反转字符串 aStr?
8.将字符串 k:1 |k1:2|k2:3|k3:4处理成字典 {k:1,k1:2,...}
9.请按alist中元素的age由大到小排序
10.下面代码的输出结果将是什么
11.写一个列表生成式产生一个公差为11的等差数列
12.给定两个列表怎么找出他们相同的元素和不同的元素
13.请写出一段python代码实现删除list里面的重复元素
14.给定两个list AB ,请用找出AB中相同与不同的元素
企业面试题
15.python新式类和经典类的区别
16.python中内置的数据结构有几种
17.python如何实现单例模式?请写出两种实现方式?
18.反转一个整数例如-123 -- -321
19.设计实现遍历目录与子目录抓取.pyc文件
20.一行代码实现1-100之和
21.Python-遍历列表时删除元素的正确做法
22.字符串的操作题目
23.可变类型和不可变类型
24.is和有什么区别
25.求出列表所有奇数并构造新列表
26.用一行python代码写出12310248
27.Python中变量的作用域变量查找顺序)
28.字符串 123 转换成 123不使用内置api例如 int()
29.Given an array of integers
30.python代码实现删除一个list里面的重复元素
31.统计一个文本中单词频次最高的10个单词
32.请写出一个函数满足以下条件
33.使用单一的列表生成式来产生一个新的列表
34.用一行代码生成[1,4,9,16,25,36,49,64,81,100]
35.输入某年某月某日判断这一天是这一年的第几天
36.两个有序列表l1,l2对这两个列表进行合并不可使用extend
37.给定一个任意长度数组实现一个函数
38.写一个函数找出一个整数数组中第二大的数
39.阅读一下代码他们的输出结果是什么
40.统计一段字符串中字符出现的次数
41.super函数的具体用法和场景 Python基础
文件操作
1.有一个jsonline格式的文件file.txt大小约为10K
def get_lines():with open(file.txt,rb) as f:return f.readlines()if __name__ __main__:for e in get_lines():process(e) # 处理每一行数据
现在要处理一个大小为10G的文件但是内存只有4G如果在只修改get_lines 函数而其他代码保持不变的情况下应该如何实现需要考虑的问题都有那些
def get_lines():with open(file.txt,rb) as f:for i in f:yield i
Pandaaaa906提供的方法
from mmap import mmapdef get_lines(fp):with open(fp,r) as f:m mmap(f.fileno(), 0)tmp 0for i, char in enumerate(m):if charb\n:yield m[tmp:i1].decode()tmp i1if __name____main__:for i in get_lines(fp_some_huge_file):print(i)
要考虑的问题有内存只有4G无法一次性读入10G文件需要分批读入分批读入数据要记录每次读入数据的位置。分批每次读取数据的大小太小会在读取操作花费过多时间。 https://stackoverflow.com/questions/30294146/python-fastest-way-to-process-large-file
2.补充缺失的代码
def print_directory_contents(sPath):这个函数接收文件夹的名称作为输入参数
返回该文件夹中文件的路径
以及其包含文件夹中文件的路径import os
for s_child in os.listdir(s_path):s_child_path os.path.join(s_path, s_child)if os.path.isdir(s_child_path):print_directory_contents(s_child_path)else:print(s_child_path)
模块与包
3.输入日期 判断这一天是这一年的第几天
import datetime
def dayofyear():year input(请输入年份: )month input(请输入月份: )day input(请输入天: )date1 datetime.date(yearint(year),monthint(month),dayint(day))date2 datetime.date(yearint(year),month1,day1)return (date1-date2).days1
4.打乱一个排好序的list对象alist
import random
alist [1,2,3,4,5]
random.shuffle(alist)
print(alist)
数据类型
5.现有字典 d {a:24,g:52,i:12,k:33}请按value值进行排序?
sorted(d.items(),keylambda x:x[1])
6.字典推导式
d {key:value for (key,value) in iterable}
7.请反转字符串 aStr?
print(aStr[::-1])
8.将字符串 k:1 |k1:2|k2:3|k3:4处理成字典 {k:1,k1:2,...}
str1 k:1|k1:2|k2:3|k3:4
def str2dict(str1):dict1 {}for iterms in str1.split(|):key,value iterms.split(:)dict1[key] valuereturn dict1
#字典推导式
d {k:int(v) for t in str1.split(|) for k, v in (t.split(:), )}
9.请按alist中元素的age由大到小排序
alist [{name:a,age:20},{name:b,age:30},{name:c,age:25}]
def sort_by_age(list1):return sorted(alist,keylambda x:x[age],reverseTrue)
10.下面代码的输出结果将是什么
list [a,b,c,d,e]
print(list[10:])
代码将输出[],不会产生IndexError错误就像所期望的那样尝试用超出成员的个数的index来获取某个列表的成员。例如尝试获取list[10]和之后的成员会导致IndexError。然而尝试获取列表的切片开始的index超过了成员个数不会产生IndexError而是仅仅返回一个空列表。这成为特别让人恶心的疑难杂症因为运行的时候没有错误产生导致Bug很难被追踪到。
11.写一个列表生成式产生一个公差为11的等差数列
print([x*11 for x in range(10)])
12.给定两个列表怎么找出他们相同的元素和不同的元素
list1 [1,2,3]
list2 [3,4,5]
set1 set(list1)
set2 set(list2)
print(set1 set2)
print(set1 ^ set2)
13.请写出一段python代码实现删除list里面的重复元素
l1 [b,c,d,c,a,a]
l2 list(set(l1))
print(l2)
用list类的sort方法:
l1 [b,c,d,c,a,a]
l2 list(set(l1))
l2.sort(keyl1.index)
print(l2)
也可以这样写:
l1 [b,c,d,c,a,a]
l2 sorted(set(l1),keyl1.index)
print(l2)
也可以用遍历
l1 [b,c,d,c,a,a]
l2 []
for i in l1:if not i in l2:l2.append(i)
print(l2)
14.给定两个list AB ,请用找出AB中相同与不同的元素
A,B 中相同元素 print(set(A)set(B))
A,B 中不同元素: print(set(A)^set(B))
企业面试题
15.python新式类和经典类的区别
a. 在python里凡是继承了object的类都是新式类
b. Python3里只有新式类
c. Python2里面继承object的是新式类没有写父类的是经典类
d. 经典类目前在Python里基本没有应用
16.python中内置的数据结构有几种
a. 整型 int、 长整型 long、浮点型 float、 复数 complex
b. 字符串 str、 列表 list、 元祖 tuple
c. 字典 dict 、 集合 set
d. Python3 中没有 long只有无限精度的 int
17.python如何实现单例模式?请写出两种实现方式?
第一种方法:使用装饰器
def singleton(cls):instances {}def wrapper(*args, **kwargs):if cls not in instances:instances[cls] cls(*args, **kwargs)return instances[cls]return wrappersingleton
class Foo(object):pass
foo1 Foo()
foo2 Foo()
print(foo1 is foo2) # True
第二种方法使用基类 New 是真正创建实例对象的方法所以重写基类的new 方法以此保证创建对象的时候只生成一个实例
class Singleton(object):def __new__(cls, *args, **kwargs):if not hasattr(cls, _instance):cls._instance super(Singleton, cls).__new__(cls, *args, **kwargs)return cls._instanceclass Foo(Singleton):passfoo1 Foo()
foo2 Foo()print(foo1 is foo2) # True
第三种方法元类元类是用于创建类对象的类类对象创建实例对象时一定要调用call方法因此在调用call时候保证始终只创建一个实例即可type是python的元类
class Singleton(type):def __call__(cls, *args, **kwargs):if not hasattr(cls, _instance):cls._instance super(Singleton, cls).__call__(*args, **kwargs)return cls._instance# Python2
class Foo(object):__metaclass__ Singleton# Python3
class Foo(metaclassSingleton):passfoo1 Foo()
foo2 Foo()
print(foo1 is foo2) # True18.反转一个整数例如-123 -- -321
class Solution(object):def reverse(self,x):if -10x10:return xstr_x str(x)if str_x[0] !-:str_x str_x[::-1]x int(str_x)else:str_x str_x[1:][::-1]x int(str_x)x -xreturn x if -2147483648x2147483647 else 0
if __name__ __main__:s Solution()reverse_int s.reverse(-120)print(reverse_int)
19.设计实现遍历目录与子目录抓取.pyc文件
第一种方法
import osdef get_files(dir,suffix):res []for root,dirs,files in os.walk(dir):for filename in files:name,suf os.path.splitext(filename)if suf suffix:res.append(os.path.join(root,filename))print(res)get_files(./,.pyc)
第二种方法
import osdef pick(obj):if ob.endswith(.pyc):print(obj)def scan_path(ph):file_list os.listdir(ph)for obj in file_list:if os.path.isfile(obj):pick(obj)elif os.path.isdir(obj):scan_path(obj)if __name____main__:path input(输入目录)scan_path(path)
第三种方法
from glob import iglobdef func(fp, postfix):for i in iglob(f{fp}/**/*{postfix}, recursiveTrue):print(i)if __name__ __main__:postfix .pycfunc(K:\Python_script, postfix)
20.一行代码实现1-100之和
count sum(range(0,101))
print(count)
21.Python-遍历列表时删除元素的正确做法
遍历在新在列表操作删除时在原来的列表操作
a [1,2,3,4,5,6,7,8]
print(id(a))
print(id(a[:]))
for i in a[:]:if i5:passelse:a.remove(i)print(a)
print(-----------)
print(id(a))#filter
a[1,2,3,4,5,6,7,8]
b filter(lambda x: x5,a)
print(list(b))
列表解析
a[1,2,3,4,5,6,7,8]
b [i for i in a if i5]
print(b)
倒序删除 因为列表总是‘向前移’所以可以倒序遍历即使后面的元素被修改了还没有被遍历的元素和其坐标还是保持不变的
a[1,2,3,4,5,6,7,8]
print(id(a))
for i in range(len(a)-1,-1,-1):if a[i]5:passelse:a.remove(a[i])
print(id(a))
print(-----------)
print(a)
22.字符串的操作题目
全字母短句 PANGRAM 是包含所有英文字母的句子比如A QUICK BROWN FOX JUMPS OVER THE LAZY DOG. 定义并实现一个方法 get_missing_letter, 传入一个字符串采纳数返回参数字符串变成一个 PANGRAM 中所缺失的字符。应该忽略传入字符串参数中的大小写返回应该都是小写字符并按字母顺序排序请忽略所有非 ACSII 字符
下面示例是用来解释双引号不需要考虑:
(0)输入: A quick brown for jumps over the lazy dog
返回
(1)输入: A slow yellow fox crawls under the proactive dog
返回: bjkmqz
(2)输入: Lions, and tigers, and bears, oh my!
返回: cfjkpquvwxz
(3)输入:
返回abcdefghijklmnopqrstuvwxyz
def get_missing_letter(a):s1 set(abcdefghijklmnopqrstuvwxyz)s2 set(a.lower())ret .join(sorted(s1-s2))return retprint(get_missing_letter(python))# other ways to generate letters
# range(a, z)
# 方法一:
import string
letters string.ascii_lowercase
# 方法二:
letters .join(map(chr, range(ord(a), ord(z) 1)))
23.可变类型和不可变类型
1,可变类型有list,dict.不可变类型有stringnumber,tuple.
2,当进行修改操作时可变类型传递的是内存中的地址也就是说直接修改内存中的值并没有开辟新的内存。
3,不可变类型被改变时并没有改变原内存地址中的值而是开辟一块新的内存将原地址中的值复制过去对这块新开辟的内存中的值进行操作。
24.is和有什么区别
is比较的是两个对象的id值是否相等也就是比较俩对象是否为同一个实例对象。是否指向同一个内存地址 比较的两个对象的内容/值是否相等默认会调用对象的eq()方法
25.求出列表所有奇数并构造新列表
a [1,2,3,4,5,6,7,8,9,10]
res [ i for i in a if i%21]
print(res)
26.用一行python代码写出12310248
from functools import reduce
#1.使用sum内置求和函数
num sum([1,2,3,10248])
print(num)
#2.reduce 函数
num1 reduce(lambda x,y :xy,[1,2,3,10248])
print(num1)
27.Python中变量的作用域变量查找顺序)
函数作用域的LEGB顺序
1.什么是LEGB?
L local 函数内部作用域
E: enclosing 函数内部与内嵌函数之间
G: global 全局作用域
B build-in 内置作用
python在函数里面的查找分为4种称之为LEGB也正是按照这是顺序来查找的
28.字符串 123 转换成 123不使用内置api例如 int()
方法一 利用 str 函数
def atoi(s):num 0for v in s:for j in range(10):if v str(j):num num * 10 jreturn num
方法二 利用 ord 函数
def atoi(s):num 0for v in s:num num * 10 ord(v) - ord(0)return num
方法三: 利用 eval 函数
def atoi(s):num 0for v in s:t %s * 1 % vn eval(t)num num * 10 nreturn num
方法四: 结合方法二使用 reduce一行解决
from functools import reduce
def atoi(s):return reduce(lambda num, v: num * 10 ord(v) - ord(0), s, 0)
29.Given an array of integers
给定一个整数数组和一个目标值找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案且同样的元素不能被重复利用。示例:给定nums [2,7,11,15],target9 因为 nums[0]nums[1] 27 9,所以返回[0,1]
class Solution:def twoSum(self,nums,target)::type nums: List[int]:type target: int:rtype: List[int]d {}size 0while size len(nums):if target-nums[size] in d:if d[target-nums[size]] size:return [d[target-nums[size]],size]else:d[nums[size]] sizesize size 1
solution Solution()
list [2,7,11,15]
target 9
nums solution.twoSum(list,target)
print(nums)
给列表中的字典排序假设有如下list对象alist[{name:a,age:20},{name:b,age:30},{name:c,age:25}],将alist中的元素按照age从大到小排序 alist[{name:a,age:20},{name:b,age:30},{name:c,age:25}]
alist_sort sorted(alist,keylambda e: e.__getitem__(age),reverseTrue)
30.python代码实现删除一个list里面的重复元素
def distFunc1(a):使用集合去重a list(set(a))print(a)def distFunc2(a):将一个列表的数据取出放到另一个列表中中间作判断list []for i in a:if i not in list:list.append(i)#如果需要排序的话用sortlist.sort()print(list)def distFunc3(a):使用字典b {}b b.fromkeys(a)c list(b.keys())print(c)if __name__ __main__:a [1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]distFunc1(a)distFunc2(a)distFunc3(a)
31.统计一个文本中单词频次最高的10个单词
import re# 方法一
def test(filepath):distone {}with open(filepath) as f:for line in f:line re.sub(\W, , line)lineone line.split()for keyone in lineone:if not distone.get(keyone):distone[keyone] 1else:distone[keyone] 1num_ten sorted(distone.items(), keylambda x:x[1], reverseTrue)[:10]num_ten [x[0] for x in num_ten]return num_ten# 方法二
# 使用 built-in 的 Counter 里面的 most_common
import re
from collections import Counterdef test2(filepath):with open(filepath) as f:return list(map(lambda c: c[0], Counter(re.sub(\W, , f.read()).split()).most_common(10)))
32.请写出一个函数满足以下条件
该函数的输入是一个仅包含数字的list,输出一个新的list其中每一个元素要满足以下条件
1、该元素是偶数
2、该元素在原list中是在偶数的位置(index是偶数)
def num_list(num):return [i for i in num if i %2 0 and num.index(i)%20]num [0,1,2,3,4,5,6,7,8,9,10]
result num_list(num)
print(result)
33.使用单一的列表生成式来产生一个新的列表
该列表只包含满足以下条件的值元素为原始列表中偶数切片
list_data [1,2,5,8,10,3,18,6,20]
res [x for x in list_data[::2] if x %2 0]
print(res)
34.用一行代码生成[1,4,9,16,25,36,49,64,81,100]
[x * x for x in range(1,11)]
35.输入某年某月某日判断这一天是这一年的第几天
import datetimey int(input(请输入4位数字的年份:))
m int(input(请输入月份:))
d int(input(请输入是哪一天))targetDay datetime.date(y,m,d)
dayCount targetDay - datetime.date(targetDay.year -1,12,31)
print(%s是 %s年的第%s天。%(targetDay,y,dayCount.days))
36.两个有序列表l1,l2对这两个列表进行合并不可使用extend
def loop_merge_sort(l1,l2):tmp []while len(l1)0 and len(l2)0:if l1[0] l2[0]:tmp.append(l1[0])del l1[0]else:tmp.append(l2[0])del l2[0]while len(l1)0:tmp.append(l1[0])del l1[0]while len(l2)0:tmp.append(l2[0])del l2[0]return tmp
37.给定一个任意长度数组实现一个函数
让所有奇数都在偶数前面而且奇数升序排列偶数降序排序如字符串1982376455,变成1355798642
# 方法一
def func1(l):if isinstance(l, str):l [int(i) for i in l]l.sort(reverseTrue)for i in range(len(l)):if l[i] % 2 0:l.insert(0, l.pop(i))print(.join(str(e) for e in l))# 方法二
def func2(l):print(.join(sorted(l, keylambda x: int(x) % 2 0 and 20 - int(x) or int(x))))
38.写一个函数找出一个整数数组中第二大的数
def find_second_large_num(num_list):找出数组第2大的数字# 方法一# 直接排序输出倒数第二个数即可tmp_list sorted(num_list)print(方法一\nSecond_large_num is :, tmp_list[-2])# 方法二# 设置两个标志位一个存储最大数一个存储次大数# two 存储次大值one 存储最大值遍历一次数组即可先判断是否大于 one若大于将 one 的值给 two将 num_list[i] 的值给 one否则比较是否大于two若大于直接将 num_list[i] 的值给two否则passone num_list[0]two num_list[0]for i in range(1, len(num_list)):if num_list[i] one:two oneone num_list[i]elif num_list[i] two:two num_list[i]print(方法二\nSecond_large_num is :, two)# 方法三# 用 reduce 与逻辑符号 (and, or)# 基本思路与方法二一样但是不需要用 if 进行判断。from functools import reducenum reduce(lambda ot, x: ot[1] x and (ot[1], x) or ot[0] x and (x, ot[1]) or ot, num_list, (0, 0))[0]print(方法三\nSecond_large_num is :, num)if __name__ __main___:num_list [34, 11, 23, 56, 78, 0, 9, 12, 3, 7, 5]find_second_large_num(num_list)
39.阅读一下代码他们的输出结果是什么
def multi():return [lambda x : i*x for i in range(4)]
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]
40.统计一段字符串中字符出现的次数
# 方法一
def count_str(str_data):定义一个字符出现次数的函数dict_str {} for i in str_data:dict_str[i] dict_str.get(i, 0) 1return dict_str
dict_str count_str(AAABBCCAC)
str_count_data
for k, v in dict_str.items():str_count_data k str(v)
print(str_count_data)# 方法二
from collections import Counterprint(.join(map(lambda x: x[0] str(x[1]), Counter(AAABBCCAC).most_common())))
41.super函数的具体用法和场景
https://python3-cookbook.readthedocs.io/zh_CN/latest/c08/p07_calling_method_on_parent_class.html