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 A,B ,请用找出A,B中相同与不同的元素
企业面试题
15.python新式类和经典类的区别?
16.python中内置的数据结构有几种?
17.python如何实现单例模式?请写出两种实现方式?
18.反转一个整数,例如-123 --> -321
19.设计实现遍历目录与子目录,抓取.pyc文件
20.一行代码实现1-100之和
21.Python-遍历列表时删除元素的正确做法
22.字符串的操作题目
23.可变类型和不可变类型
24.is和==有什么区别?
25.求出列表所有奇数并构造新列表
26.用一行python代码写出1+2+3+10248
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 mmap
def get_lines(fp):
with open(fp,“r+”) as f:
m = mmap(f.fileno(), 0)
tmp = 0
for i, char in enumerate(m):
if char==b"\n":
yield m[tmp:i+1].decode()
tmp = i+1
if 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(year=int(year),month=int(month),day=int(day))
date2 = datetime.date(year=int(year),month=1,day=1)
return (date1-date2).days+1
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(),key=lambda 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] = value
return 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,key=lambda x:x[‘age’],reverse=True)
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(key=l1.index)
print(l2)
也可以这样写:
l1 = [‘b’,‘c’,‘d’,‘c’,‘a’,‘a’]
l2 = sorted(set(l1),key=l1.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 A,B ,请用找出A,B中相同与不同的元素
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 wrapper
@singleton
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._instance
class Foo(Singleton):
pass
foo1 = 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(metaclass=Singleton):
pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) # True
18.反转一个整数,例如-123 --> -321
class Solution(object):
def reverse(self,x):
if -10<x<10:
return x
str_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 = -x
return x if -2147483648<x<2147483647 else 0
if name == ‘main’:
s = Solution()
reverse_int = s.reverse(-120)
print(reverse_int)
19.设计实现遍历目录与子目录,抓取.pyc文件
第一种方法:
import os
def 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 os
def 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 iglob
def func(fp, postfix):
for i in iglob(f"{fp}/**/*{postfix}", recursive=True):
print(i)
if name == “main”:
postfix = “.pyc”
func(“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 i>5:
pass
else:
a.remove(i)
print(a)
print(‘-----------’)
print(id(a))
#filter
a=[1,2,3,4,5,6,7,8]
b = filter(lambda x: x>5,a)
print(list(b))
列表解析
a=[1,2,3,4,5,6,7,8]
b = [i for i in a if i>5]
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:
pass
else:
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 ret
print(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)))
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
convert/252731a671c1fb70aad5355a2c5eeff0.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
[外链图片转存中…(img-nAuZfA58-1711960703824)]
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。