def mone_sorted(itera):
new_itera = []
while itera:
min_value = min(itera)
new_itera.append(min_value)
itera.remove(min_value)
  return new_itera if __name__ == "__main__":
lst = [2, 3, 1, 5, 4]
print(mone_sorted(lst))

函数内部使用了选择排序的思想

1 编写函数,模拟内置函数sorted()

2 若有一个jsonline格式的文件file.txt,大小约为10K,我们的处理方式为:

def get_lines():
l = []
with open('file.txt', 'rb') as f:
for eachline in f:
l.append(eachline)
return l if __name__ == '__main__':
for e in get_lines():
process(e) #处理每一行数据

现在要处理一个大小为10G的file.txt文件,但是内存只有4G。如果在只修改get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有那些?

def get_lines():
l = []
with open('file.txt','rb') as f:
data = f.readlines(60000)
l.append(data)
yield l

3 输入日期。判断这一天是今年的第几天。

import datetime

year = int(input('请输入年:'))
month= int(input('请输入月:'))
day = int(input('请输入日:'))
date1 = datetime.date(year=year, month=month, day=day)
date2 = datetime.date(year=year, month=1, day=1)
date3 = date1-date2
print(date3)

4 打乱一个排好序的list

import random

def daluan(lst):
random.shuffle(lst)
return lst lst = [1, 2, 3, 4, 5]
print(daluan(lst))

5 按照一个字典的值来对这个字典进行排序

old_dic = {'a':6, 'b':3, 'c':2, 'd':4, 'e':5, 'f':1}
new_dic = sorted(old_dic.items(), key=lambda d:d[1])
print(new_dic)

6 字典推导式

{key,value for key,value in iterable}

7 反转字符串

s[::-1]

8 将字符串 "k:1 |k1:2|k2:3|k3:4",处理成字典 {k:1,k1:2,...}

def qie(str):
new_dict = {}
for i in str.split('|'):
key, value = i.split(':')
new_dict[key] = value
return new_dict str = "k:1|k1:2|k2:3|k3:4"
print(qie(str))

9 请按alist中元素的age由大到小排序

def sort_by_age(lst):
return sorted(lst, key=lambda x:x['age']) alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
print(sort_by_age(alist))

10 下面代码的输出结果将是什么?

list = ['a','b','c','d','e']
print(list[10:])

答案 []

11 写一个列表生成式,产生一个公差为11的等差数列

lst = [x*11 for x in range(0,11)]
print(lst)

12 给定两个列表,怎么找出他们相同的元素和不同的元素?

list1 = [1, 2, 3, 4]
list2 = [2, 3, 4, 5]
print(set(list1) & set(list2))
print(set(list1) ^ set(list2))

13 序列去重

old_lst = [2, 2, 1, 1, 3, 4]
new_lst = list(set(old_lst))
new_lst.sort(key=old_lst.index)
print(new_lst) new_lst1 = []
for i in old_lst:
if i not in new_lst1:
new_lst1.append(i)
print(new_lst1)

14 python中新式类和经典类的区别

a. 在python里凡是继承了object的类,都是新式类

b. Python3里只有新式类

c. Python2里面继承object的是新式类,没有写父类的是经典类

d. 经典类目前在Python里基本没有应用

15 如何用python实现单例模式

第一种:__new__

class Singalton:
def __new__(cls, *args, **kwargs):
if not hasattr(cls, 'instance'):
cls.instance = super(Singalton, cls).__new__(cls, *args, **kwargs)
return cls.instance obj1 = Singalton()
obj2 = Singalton()
obj1.attr1 = 'value1'
print(obj1.attr1, obj2.attr1)
print(obj1 is obj2)

第二种:装饰器

class Singalton:
def __new__(cls, *args, **kwargs):
if not hasattr(cls, 'instance'):
cls.instance = super(Singalton, cls).__new__(cls, *args, **kwargs)
return cls.instance obj1 = Singalton()
obj2 = Singalton()
obj1.attr1 = 'value1'
print(obj1.attr1, obj2.attr1)
print(obj1 is obj2)

16 反转一个整数

def fan(n):
if n >= 0:
n_str = str(n)
new_n = int(n_str[::-1])
else:
n_str = str(n)
new_n = -int(n_str[:0:-1])
return new_n if __name__ == '__main__':
n1 = 123
n2 = -123
print(type(fan(n1)),fan(n1))
print(type(fan(n2)),fan(n2))

17 实现遍历目录和子目录

import os

def scanf(path):
file_lst = os.listdir(path)
for obj in file_lst:
print(obj)
if os.path.isfile(obj):
print(obj)
elif os.path.isdir(obj):
scanf(obj)
else:
print('over')
if __name__ == '__main__':
scanf('G:\学习与资料')

18 一行代码实现1-100之和

print(sum(range(0, 101)))

19 遍历列表时删除元素

我们规定删除大于10的数字

第一种:列表推导式

lst = [1, 5, 12, 5, 13, 6, 9, 10]

new_lst = [i for i in lst if i < 10]
print(new_lst)

第二种:遍历删除

lst = [1, 5, 12, 5, 13, 6, 9, 10]

for i in lst:
if i >= 10:
lst.remove(i)
print(lst)

第三种:filter()

lst = [1, 5, 12, 5, 13, 6, 9, 10]

new_lst = filter(lambda x : x < 10, lst)
print(list(new_lst))

20 全字母短句 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):
a1 = set('abcdefghijklmnopqrstuvwxyz')
a2 = set(a)
new_a = ''.join(sorted(a1-a2))
return new_a print(get_missing_letter('python'))

21 求出列表的所有奇数

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_lst = [i for i in lst if i % 2 != 0]
print(new_lst)

22 python中变量的作用域

函数作用域的LEGB

L: local 函数内部作用域

E: enclosing 函数内部与内嵌函数之间

G: global 全局作用域

B: build-in 内置作用

python在函数里面的查找分为4种,称之为LEGB,也正是按照这是顺序来查找的

23 字符串123装换为'123',不适用内置函数,如int()

def zhuan_huan(a):
num = 0
for i in a:
for j in range(10):
if i == str(j):
num = num*10 + j
return num print(zhuan_huan(''))

24 统计一个文本中单词频数最高的四个单词

import re

def search(path):
dictone = {}
with open(path) as f:
for line in f:
line = re.sub('\W+', ' ', line)#把一些特殊的字符换为空格
lineone = line.split()
for oneline in lineone:
if not dictone[oneline]:
dictone[oneline] = 1
else:
dictone += 1
num_ten = sorted(dictone.items(), key=lambda x: x[1], reverse=True)[:10]
num_ten = [x[0] for x in num_ten]
return num_ten

25 请写出一个函数满足以下条件

该函数的输入是一个仅包含数字的list,输出一个新的list,其中每一个元素要满足以下条件:

1、该元素是偶数

2、该元素在原list中是在偶数的位置(index是偶数)

def num_list(lst):
return [i for i in lst if i%2==0 and lst.index(i)%2 == 0] num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(num_list(num))

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

lst = [i**2 for i in range(1, 11)]
print(lst)

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

def sort_by(lst1, lst2):
new_lst = []
while len(lst1)> 0 and len(lst2) > 0:
if lst1[0] < lst2[0]:
new_lst.append(lst1[0])
del lst1[0]
elif lst1[0] > lst2[0]:
new_lst.append(lst2[0])
del lst2[0]
elif lst1[0] == lst2[0]:
new_lst.append(lst2[0])
del lst1[0], lst2[0]
if lst1 == []:
new_lst += lst2
if lst2 == []:
new_lst += lst1
return new_lst lst1 = [1, 2, 3, 4, 5, 9, 11, 15]
lst2 = [3, 4, 6, 8, 9 , 11, 12, 19]
print(sort_by(lst1, lst2))

28 给定一个任意长度数组,实现一个函数

让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序,如字符串'1982376455',变成'1355798642'

def ji_ou(s):
s1, s2 = [], []
for i in s:
if int(i) % 2 == 0:
s2.append(i)
else:
s1.append(i)
new_s = sorted(s1) + sorted(s2)
new_s = ''.join(new_s)
return new_s s = ''
print(ji_ou(s))

29 写出一个函数找出整数组中第二大的数

def search(lst):
num = sorted(lst, reverse=True)[1]
return num lst = [1, 3, 5, 2, 4, 0]
print(search(lst))

30 阅读如下代码,它会输出什么结果

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

[9, 9, 9, 9]

31 统计一段字符串中字符出现的次数

def count_word(s):
out_dict = {}
for i in set(s):
out_dict[i] = list(s).count(i)
return out_dict print(count_word('dwadwakigjihefha'))

32 遍历一个类的所有属性,并打印每一个属性名

class Car:
def __init__(self, name, loss):
self.name = name
self.loss = loss def getName(self):
return self.name def getPrice(self):
return self.loss[0] def getLoss(self):
return self.loss[1] * self.loss[2] bmw = Car('奔驰', [100, 1, 50]) # 实例化
print(getattr(bmw, 'name')) # 使用getattr传入name属性
print(dir(bmw)) # 答应实例的属性

33 写一个类,并让他尽可能多的支持字符操作

class Array:
__list = [] def __init__(self):
print "constructor" def __del__(self):
print "destruct" def __str__(self):
return "this self-defined array class" def __getitem__(self,key):
return self.__list[key] def __len__(self):
return len(self.__list) def Add(self,value):
self.__list.append(value) def Remove(self,index):
del self.__list[index] def DisplayItems(self):
print "show all items---"
for item in self.__list:
print item

34 动态的获取和设置对象的属性

    dir([obj]):
    调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。
    hasattr(obj, attr): 
    这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。
    getattr(obj, attr): 
    调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为'bar',则返回obj.bar。
    setattr(obj, attr, val):
    调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为'bar',则相当于obj.bar = val。

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

def find_sec(lst):
new_lst = list(set(lst))
sec_num = sorted(new_lst, reverse=True)[1]
return sec_num lst = [4, 6, 3, 1, 5, 5]
print(find_sec(lst))

36 python交换2个变量的值

a, b = 1, 2
a, b = b, a
print(a, b)

37 map函数和reduce函数

map函数:根据指定的函数对指定的序列做映射

reduce函数:会对参数序列中元素进行累积

38 x是什么类型?

x = (i for i in range(10))
print(type(x))

39 请用一行代码 实现将1-N 的整数列表以3为单位分组

lst = [[x for x in range(1, 101)][i:i+3] for i in range(0, 100, 3)]
print(lst)

40 请鞋一段正则表达式 匹配出ip地址

import re

pattern = re.compile('^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$')
str1 = '192.168.225.255'
x = pattern.findall(str1)
print(x)

上述代码分析:

25[0-5]:匹配250-255

2[0-4]\d:匹配200-249

[0-1]\d{2}:匹配000-199

[1-9]?\d:匹配0-99

41 str1 = “abbbccc”,用正则匹配为abccc,不管有多少b,就出现一次

import re

str1 = 'abbbbccc'
pattern = re.sub('b+', 'b', str1)
print(pattern)

42 写出开头匹配字母和下划线,末尾是数字的正则表达式

^\w.*\d$

43 怎么过滤评论中的表情

用正则匹配出评论中的表情,然后使用sub将表情替换为空

44 进程Process

import os
from multiprocessing import Process
import time def pro_func(name, age, **kwargs):
for i in range(5):
print("子进程进行中 name=%s,age=%d,pid=%d"%(name, age, os.getpid()))
print(kwargs)
time.sleep(0.2) if __name__ == '__main__':
p = Process(target=pro_func, args=('李强', 30), kwargs={'m':20})
p.start()
time.sleep(0.5)
p.terminate() #一种强行关闭子进程的方法
p.join()

45 进程间的消息队列

from multiprocessing import Process, Queue
import os, time, random def write(q):
for value in ['A', 'B', 'C']:
print('put %s to queue...'%value)
q.put(value)
time.sleep(random.random()) def read(q):
while True:
if not q.empty():
value = q.get(True)
print('get %s from the queue'%value)
time.sleep(random.random())
else:
break
if __name__ == '__main__':
q = Queue()
pw = Process(target=write, args=(q,))
pr = Process(target=read, args=(q,))
pw.start()
pw.join()
pr.start()
pr.join()
print('所有数据写完,并且读完')

46 进程池

from multiprocessing import Pool
import os,time,random def worker(msg):
start = time.time()
print("%s 开始执行,进程号为%d"%(msg,os.getpid()))
# random.random()随机生成0-1之间的浮点数
time.sleep(random.random()*2)
stop = time.time()
print(msg,'执行完毕,耗时%0.2f'%(stop - start)) if __name__ == '__main__':
po = Pool(3) #定义一个进程池,最大进程数3
for i in range(0,10):
po.apply_async(worker,(i,))
print("---start----")
po.close()
po.join()
print("----end----")

47 进程池中使用queue

如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会得到如下的错误信息:

RuntimeError: Queue objects should only be shared between processs through inheritance

from multiprocessing import Manager,Pool
import os,time,random def reader(q):
print("reader 启动(%s),父进程为(%s)"%(os.getpid(),os.getpid()))
for i in range(q.qsize()):
print("reader 从Queue获取到消息:%s"%q.get(True)) def writer(q):
print("writer 启动(%s),父进程为(%s)"%(os.getpid(),os.getpid()))
for i in 'itcast':
q.put(i) if __name__ == "__main__":
print("(%s)start"%os.getpid())
q = Manager().Queue()#使用Manager中的Queue
po = Pool()
po.apply_async(writer,(q,))
time.sleep(1)
po.apply_async(reader,(q,))
po.close()
po.join()
print("(%s)End"%os.getpid())

48 多线程共同操作同一个数据互斥锁同步

import threading
import time class MyThread(threading.Thread):
def run(self):
global num
time.sleep(1)
if mutex.acquire(1):
num += 1
msg = self.name + 'set num to ' + str(num)
print(msg)
mutex.release() num = 0
mutex = threading.Lock() def test():
for i in range(5):
t = MyThread()
t.start() if __name__ == "__main__":
test()

49 请介绍下python的线程同步

一 setDaemon(False) 默认情况下就是setDaemon(False),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束

import threading, time

def thread():
time.sleep(2)
print('子线程结束') def main():
t1 = threading.Thread(target=thread)
t1.start()
print('主线程结束') if __name__ == '__main__':
main()

二 setDaemon(True) ) 当我们使用setDaemon(True)时,这是子线程为守护线程,主线程一旦执行结束,则全部子线程被强制终止

import threading, time

def thread():
time.sleep(2)
print('子线程结束') def main():
t1 = threading.Thread(target=thread)
t1.setDaemon(True)
t1.start()
print('主线程结束') if __name__ == '__main__':
main()

三 join(线程同步) join 所完成的工作就是线程同步,即主线程任务结束以后,进入堵塞状态,一直等待所有的子线程结束以后,主线程再终止。

当设置守护线程时,含义是主线程对于子线程等待timeout的时间将会杀死该子线程,最后退出程序,所以说,如果有10个子线程,全部的等待时间就是每个timeout的累加和,简单的来说,就是给每个子线程一个timeou的时间,让他去执行,时间一到,不管任务有没有完成,直接杀死。

没有设置守护线程时,主线程将会等待timeout的累加和这样的一段时间,时间一到,主线程结束,但是并没有杀死子线程,子线程依然可以继续执行,直到子线程全部结束,程序退出。

import threading, time

def thread():
time.sleep(2)
print('子线程结束') def main():
t1 = threading.Thread(target=thread)
t1.setDaemon(True)
t1.start()
# t1.join() # 不设置时堵塞主线程,等待子线程结束后主线程再结束
t1.join(timeout=1) # 设置timeout=1时,主线程堵塞1s,然后杀死所有子线程,然后主进程结束
print('主线程结束') if __name__ == '__main__':
main()

50 多线程交互访问数据,访问到了就不访问了?如何做?

创建一个已访问数据列表,用于储存已访问的数据,并且加上互斥锁,在多线程访问数据的时候查看数据是否在已访问的数据中,若已存在就直接跳过。

记录python题的更多相关文章

  1. CozyRSS开发记录3-标题栏再加强

    CozyRSS开发记录3-标题栏再加强 1.更精炼的标题栏 接下来,我们把窗口的边框和默认的标题栏给去掉,让Cozy看起来更像一个平板应用. 在主窗口的属性里,修改下列两个属性: 效果一目了然: 2. ...

  2. 记录Python学习中的几个小问题

    记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...

  3. 『Python题库 - 填空题』151道Python笔试填空题

    『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...

  4. 『Python题库 - 简答题』 Python中的基本概念 (121道)

    ## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...

  5. 使用配置文件方式记录Python程序日志

    开发者可以通过三种方式配置日志记录: 调用配置方法的Python代码显式创建记录器.处理程序和格式化程序. 创建日志配置文件并使用fileConfig() 函数读取. 创建配置信息字典并将其传递给di ...

  6. Beats:使用 Elastic Stack 记录 Python 应用日志

    文章转载自:https://elasticstack.blog.csdn.net/article/details/112259500 日志记录实际上是每个应用程序都必须具备的功能.无论你选择基于哪种技 ...

  7. 记录python面试题

    闲来无事,记录一下曾经以及深刻的面试题 记录一下我记忆比较深的面试题,以后若用到python相关还能细细把玩 搜狐面试题: 一.写一个缓存优化策略 解答:这个题主要考察对lru_cache的理解,所以 ...

  8. [记录][python]python爬虫,下载某图片网站的所有图集

    随笔仅用于学习交流,转载时请注明出处,http://www.cnblogs.com/CaDevil/p/5958770.html 该随笔是记录我的第一个python程序,一个爬去指定图片站点的所有图集 ...

  9. 详细记录python的range()函数用法

    使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序. 这里记 ...

随机推荐

  1. tomcat启动,但是访问不了可能的一种状况。

    Tomcat启动但是访问http://localhost:8080/或者http://127.0.0.1:8080/ 访问不了的时候, 有可能是因为你用了代理,把代理去掉就可以了

  2. Python之路(第三十四篇) 网络编程:验证客户端合法性

    一.验证客户端合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客 ...

  3. [ES]elasticsearch章5 ES的分词(二)

    Elasticsearch 中文搜索时遇到几个问题: 当搜索关键词如:“人民币”时,如果分词将“人民币”分成“人”,“民”,“币”三个单字,那么搜索该关键词会匹配到很多包含该单字的无关内容,但是如果将 ...

  4. SOP - Validation

    Table of Contents目录表1 Roles and Responsibilities related to validation与验证相关的1个角色和职责2 Introduction2引言 ...

  5. asp.net core部署到iis中出现 HTTP Error 502.5 - Process Failure的问题

    环境是windows Server2012  问题的原因是缺少文件:api-ms-win-crt-runtimel1-1-0.dll, dotnet 启动程序失败. 解决方案1: 安装系统补丁: 20 ...

  6. C# 结构体和List<T>类型数据转Json数据保存和读取

    C#  结构体和List<T>类型数据转Json数据保存和读取 一.结构体转Json public struct FaceLibrary { public string face_name ...

  7. Python Day 12

    阅读目录: 内容回顾 函数默认值的细节 三元表达式 列表与字典推导式 函数对象 名称空间 函数嵌套的定义 作用域 ##内容回顾 # 字符串的比较 -- 按照从左往右比较每一个字符,通过字符对应的asc ...

  8. 通过TABULATE过程制作汇总报表

    通过TABULATE过程制作汇总报表 制作基本汇总报表 TABULATE过程的基本语法如下: PROC TABULATE DATA=数据集 <选项>; CLASS 变量1 <变量2变 ...

  9. 82、iOS 基本算法

    “冒泡排序.选择排序.快速排序.归并排序.逆序.二分查找.求两个整数的最大公约数和最小公倍数.” 一.冒泡排序 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的 ...

  10. Linux学习---自定义数据类型

    struct   结构体 (地址递增) eg:struct myabc{ unsigned int a; unsigned int b; unsigned int c; unsigned int d; ...