原文GitHub地址:https://github.com/kenwoodjw/python_interview_question,这篇是相关知识点的整理
有一个文件file.txt,我们定义了一个读取其的函数
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,请问如何修改上面的gei_lines,使得上述程序可以满足约束运行。
def get_lines():
l = []
with open('file.txt','rb') as f:
#限制每次读取的行数,减少时间开销
data = f.readlines(60000)
l.append(data)
yield l
输入一个文件夹路径,返回这个文件夹中所包含的文件路径
def print_directory_contents(s_path):
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)
输入一个日期,判断其是这一年中的第几天
def dayOfYear():
year = int(input())
month = int(input())
day = int(input())
date1 = datetime.date(year, month, day)
date2 = datetime.date(year, 1, 1)
return (date1 - date2).days + 1
将字典按照value进行排序
sorted(d.items(),key=lambda x:x[1])
利用生成式将字符串“k:1|k1:2|k2:3|k3:4”转换为字典
string = 'k:1|k1:2|k2:3|k3:4'
d = {k: int(v) for t in string.split('|') for k, v in (t.split(':'), )}
print(d)
用超出成员个数的index来获取某个列表的成员会导致IndexError。然而,用超过了成员个数的切片不会产生IndexError,而是仅仅返回一个空列表。
Python中内置的数据结构有哪些
:整型 int、 长整型 long(Python 3 没有)、浮点型 float、 复数 complex、字符串 str、 列表 list、 元组 tuple、字典 dict 、 集合 set
实现单例模式
# 实现单例模式
# 方法1
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
# 方法2
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
# 方法3
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
获取所有指定类型的文件
# 获取所有指定类型的文件
# 方法1
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)
# 方法2
def pick(obj, type):
if obj.endswith(type):
print(obj)
def scan_path(ph, type):
file_list = os.listdir(ph)
for obj in file_list:
if os.path.isfile(obj):
pick(obj, type)
elif os.path.isdir(obj):
scan_path(obj)
删除列表中大于5的数字
列表的切片会重新生成一个列表
a = [i for i in range(10)]
b = filter(lambda x: x > 5, a)
print(list(b))
用列表所有奇数构造新列表
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
res = [i for i in a if i % 2 == 1]
print(res)
用一行代码写1+2+3+10248
# 用一行代码写成1+2+3+10248
from functools import reduce
num = sum([1, 2, 3, 10248])
# 或者
num = reduce(lambda x, y: x + y, [1, 2, 3, 10248])
判断这一天是这一年中的第几天
targetDay = datetime.date(y, m, d)
dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31)
print("%s是 %s年的第%s天。" % (targetDay, y, dayCount.days))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)