2,395

python 学习笔记(上)

python 学习笔记(上)

1、利用collections库的Counter方法统计字符串每个单词出现的次数

>>> from collections import Counter
>>> f=Counter(d)
>>> f
Counter({'l': 9, ';': 6, 'h': 6, 'f': 5, 'a': 4, 'j': 3, 'd': 3, 's': 2, 'k': 1, 'g': 1, 'b': 1})

2、字典根据键从小到大排序

>>> dict={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
>>> b=list(sorted(dict.keys(),reverse=False))
>>> b
['age', 'city', 'name', 'tel']
>>> k=list(sorted(dict.items(),reverse=False))
>>> k
[('age', 18), ('city', '深圳'), ('name', 'zs'), ('tel', '1362626627')]

3、用lambda函数实现两个数相乘

>>> sums = lambda a,b:a*b
>>> sums(2,3)
6

4、去重字符并从小到大排序输出

1、set去重,去重转成list,利用sort方法排序,reverse=False是从小到大排

2、list是不 变数据类型,s.sort时候没有返回值,所以注释的代码写法不正确

>>> s = "ajldjlajfdljfddd"
>>> set(m)
{'l', 'a', 'd', 'f', 'j'}
>>> n.sort()
>>> n
['a', 'd', 'f', 'j', 'l']
>>> ''.join(n)
'adfjl'

5、python2和python3区别?列举6个

1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print(‘hi’):Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print ‘hi’

2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存

3、python2中使用ascii编码,python中使用utf-8编码

4、python2中unicode表示字符串序列,str表示字节序列, python3中str表示字符串序列,byte表示字节序列

5、python2中为正常显示中文,引入coding声明,python3中不需要

6、python2中是raw_input()函数,python3中是input()函数

6、filter方法求出列表所有奇数并构造新列表

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表

>>> a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> def odd(a):
...     return a%2==1
... 
>>> new_l = filter(odd, a)
>>> new_l
<\filter object at 0x7f945b6274a8>
>>> new = [i for i in new_l]
>>> new
[1, 3, 5, 7, 9]	

7、filter方法求出列表所有奇数并构造新列表

>>> a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b=[i for i in a if i%2==1]
>>> b
[1, 3, 5, 7, 9]

8、两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]

extend可以将另一个集合中的元素逐一添加到列表中,区别于append整体添加

append:
>>> a=[1,5,7,9]
>>> b=[2,2,6,8]
>>> a.append(b)
>>> a
[1, 5, 7, 9, [2, 2, 6, 8]]
extend:
>>> a.extend(b)
>>> a
[1, 5, 7, 9, 2, 2, 6, 8]
#等价于a+b

9、用python删除文件和用linux命令删除文件方法

python:os.remove(文件名)

linux: rm 文件名

10、数据库优化查询方法

外键、索引、联合查询、选择特定字段等等

11、请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行

pychart、matplotlib

12、正则表达式匹配中,(.*)和(.*?)匹配区别?

(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配

(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配

>>> import re
>>> str = '<a><a>哈哈</a>呵呵</a>'
>>> s1 =re.findall("<a>(.*)</a>", str)
>>> s1
['<a>哈哈</a>呵呵']
>>> s2 =re.findall("<a>(.*?)</a>", str)
>>> s2
['哈哈']

13、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

>>> a=[[1,2],[3,4],[5,6]]
>>> b=[j for i in a for j in i]
>>> b
[1, 2, 3, 4, 5, 6]	

13、x=”abc”,y=”def”,z=[“d”,”e”,”f”],分别求出x.join(y)和x.join(z)返回的结果

>>> x='abc'
>>> y='def'
>>> z=['d','e','f']
>>> p=x.join(y)
>>> p
'dabceabcf'
>>> g=x.join(z)
>>> g
'dabceabcf'

14、举例说明zip()函数用法

>>> a=[3,4]
>>> b=[1,2]
>>> s=[i for i in zip(a,b)]
>>> s
[(3, 1), (4, 2)]
##其中a,b可以为元组a=(3,4),也可以为字符串a='34'
>>> q='asd'
>>> w='ip'
>>> f=[i for i in zip(q,w)]
>>> f
[('a', 'i'), ('s', 'p')]
##字符取最短的元素的长度

15、a=”张明 98分”,用re.sub,将98替换为100

>>> a="张明 98分"
>>> d=re.sub(r'\d+','100',a)
>>> d
'张明 100分'

16、提高python运行效率的方法

1)使用生成器,因为可以节约大量内存

2)循环代码优化,避免过多重复代码的执行

3)核心模块用Cython PyPy等,提高效率

4)多进程、多线程、协程

5)多个if elif条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率

17、简述mysql和redis区别

redis: 内存型非关系数据库,数据保存在内存中,速度快

2)mysql:关系型数据库,数据保存在磁盘中,检索的话,会有一定的IO操作,访问速度相对慢

18、遇到bug如何处理

1)细节上的错误,通过print()打印,能执行到print()说明一般上面的代码没有问题,分段检测程序是否有问题,如果是js的话可以alert或console.log

2)如果涉及一些第三方框架,会去查官方文档或者一些技术博客

3)对于bug的管理与归类总结,一般测试将测试出的bug用teambin等bug管理工具进行记录,然后我们会一条一条进行修改,修改的过程也是理解业务逻辑和提高自己编程逻辑缜密性的方法,我也都会收藏做一些笔记记录.

4)导包问题、城市定位多音字造成的显示错误问题

19、正则匹配,匹配日期2018-10-20

>>> import re
>>> url='https://www.MuMu?datetime=2018-10-20%202018-03-20&page=1'>>> res = re.findall(r'datetime=(.*?)%20(.*?)&',url)
>>> res
[('2018-10-20', '2018-03-20')]

20、保留两位小数

>>> a="%.02f"%3.1415926
>>> a
'3.14'
>>> a="%.03f"%3.1415926
>>> a
'3.142'

21、列出常见的状态码和意义

200 OK:请求正常处理完毕

204 No Content:请求成功处理,没有实体的主体返回

206 Partial Content:GET范围请求已成功处理

301 Moved Permanently :永久重定向,资源已永久分配新URI

302 Found :临时重定向,资源已临时分配新URI

303 See Other :临时重定向,期望使用GET定向获取

304 Not Modified :发送的附带条件请求未满足

307 Temporary Redirect  :临时重定向,POST不会变成GET

400 Bad Request  :请求报文语法错误或参数错误

401 Unauthorized :需要通过HTTP认证,或认证失败

403 Forbidden:请求资源被拒绝

404 Not Found :无法找到请求资源(服务器无理由拒绝)

500 Internal Server Error  :服务器故障或Web应用故障

503 Service Unavailable   :服务器超负载或停机维护

# 输入一个整数,返回该数的阶乘倒数第一个非零数,如:结果为1200,则输出2
# 思路: 由于有的数量级超过了正常长度,所以每次计算结果的末尾的0都要去掉

a = input("输入一个整数:")
num = 1
for i in range(1, int(a)+1):
    num*= i
    num = int(str(num).replace('0',''))
result = str(num).replace('0','')[-1]
print(result)

# 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
# star ====

sums = 0
for i in range(1, 5):
    for j in range(1, 5):
        for z in range(1, 5):
            if i != j and j != z:
                sums += 1
                print(i,j,z)
print(sums)

# end ====

# 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
# star ====

import math

for i in range(10000):
    if math.sqrt(i+100) - int(math.sqrt(i+100)) == 0:
        x = int(math.sqrt(i+100))
        if math.sqrt(i+268) - int(math.sqrt(i+268)) == 0:
            y = int(math.sqrt(i+268))
            print(x,y)
            # if x*x == 100 + i and y*y == i+268:
            #     print(x,y)

# end ====

#题目:输入三个整数x,y,z,请把这三个数由小到大输出。
# star ====

x = input('输入第一个数')
y = input('输入第一个数')
z = input('输入第一个数')
if int(x) > int(y):
    if int(x) > int(z):
        if int(y) > int(z):
            print(z, y, x)
        else:
            print(y, z, x)
    else:
        print(y, x, z)
else:
    if int(x) < int(z):
        if int(y) < int(z):
            print(x, y, z)
        else:
            print(x, z, y)
    else:
        print(z, x, y)

# 内置方法
l = [int(x), int(y), int(z)]
# news = l.sort()
news= sorted(l)
news_1= sorted(l, reverse=True) # True:倒序
# sorted:不改变原列表、sort则会改变源列表
print(l, news, news_1)

# end ====

# 题目:判断101-200之间有多少个素数,并输出所有素数。
# 思路 :在一般领域,对正整数n,如果用2到 sqrt(n) 之间的所有整数去除,均无法整除,则n为质数。

import math
num = input("输入一个101-200之间的整数")
def check(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True
print(check(int(num)))

原文:https://blog.csdn.net/weixin_40907382
/article/details/80621513

发表评论

邮箱地址不会被公开。 必填项已用*标注