smartX Python基础知识面试题,函数式编程,深浅拷贝,装饰器,词频统计

1. 一行代码实现对列表a中的偶数位置的元素进行加3后求和?比如 a = [1, 2, 3, 4, 5], 求和结果为 24 

使用sum加切片

sum([x+3 for x in a[1::2]])

使用reduce函数

reduce(lambda x, y: x+y, [x+3 for x in a[1::2])

 

2. 请写出执⾏如下脚本后在控制台输出的内容:

2. 请写出执⾏如下脚本后在控制台输出的内容:
import copy                         
a = [[1, 2, 3], [4, 5, 6]] 
b=a
c = copy.copy(a)                            
a.append(7)
a[1][2] = 10                        
print(b)
print(c)

b=a,是对象的引用,显然b就是

[[1, 2, 3], [4, 5, 10], 7]

c是对a的一个浅拷贝,但a增加一个元素,c却不会增加,原因是地址的问题。c只是拷贝了原地址,不知道新来的东西,但是对a[1][2]的修改是用的。

from functools import reduce
                            
L = reduce(lambda x,y: x+y, [[i]*i for i in range(1,6)])

print(L)
#[[1],[2,2],[3,3,3],[4,4,4,4],[5,5,5,5,5]]

[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]

 

  终于有点懂装饰器的意义了,大概就是把原来的函数包装起来在传给原函数,这样原函数不用改动就能增加功能,decorator真的很强大。加油!!!

 

4. 编写装饰器,使得函数在被修饰后在调⽤时多打印⼀行字符串 

def decor(func):
    def warpper():
        print("hello")
        func()

    return warpper

@decor
def say_happy():
    print("I'm very happy!")

if __name__ == "__main__":
    say_happy()

 

 


5. 实现统计一篇英文文章内每个单词的出现频率,并返回出现频率最高的前10个单词及其出现次数

直接使用collections的Counter容器

import re
from collections import Counter
 
with open('1.txt', 'r', ) as f:
    words = f.read()                         # 将文件的内容全部读取成一个字符串
    count = Counter(re.split(r"\W+", words))  # 以单词为分隔
 
result = count.most_common(10)                # 统计最常使用的前10个
print(result)

人为分割,Python字典排序

result = sorted(word_dict.items(), key=lambda d: d[1], reverse=True)[:10]
print(result)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值