python 面试题



两数交换:

def func(a, b):
	a, b = b, a
	print(a, b)
	
a = [1, 2]
b = [3, 4]
func(a, b)
print(a, b)

函数传参,函数中的参数是局部变量

对于不可变类型,是将数值拷贝然后进行传递

对于可变类型,是将引用传递进去

堆栈结构调用

函数调用结束后要释放掉


print的方法

end 结尾符号,默认"\n"

flush 是否刷新缓冲区数据到控制台,python的print,默认是将数据写入缓冲区,缓冲区有默认大小,只有数 据大小超出缓冲区限制或者遇到换行符或者手动刷新(flush=True)才会写入到控制台

会默认加入缓冲区

文件读写

f.read() 整个文件读取

f.readline() 大文件使用该方法,一次读取一行

f.readlines() 一次读取一行,读取整个文件,返回一个列表


列表反转

list = [1, 2, 3, 4, 5, 6, 7]
list.reverse()
list[::-1]


list1 = [1, 2, 3, 4, 5, 6, 7]
# list2 = [6, 7, 1, 2, 3, 4, 5]
# 将列表转换成第二个列表,不允许开辟新的空间,只用数据之间位置变换


def reverse(list1, start, end):  # 传入索引
    while start < end:
        list1[start], list1[end] = list1[end], list1[start]  # 按照传入的前后索引将对应索引的数据进行转换,实现反转
        start += 1  # 初始索引加1
        end -= 1  # 末尾索引减1


reverse(list1, 0, 4)  # 先将前半段倒序
reverse(list1, 5, 6)  # 将后半段倒序
reverse(list1, 0, 6)  # 整体倒序,即得到需要的数据
print(list1)


复杂元素排序

from operator import itemgetter, attrgetter

dict1 = {
    "item1": 12,
    "item2": 16,
    "item3": 22
}

list1 = sorted(dict1.items(), key=itemgetter(1))
print(list1)

# 列表中是字典元素
list2 = [
    {"name": "b", "age": 12},
    {"name": "a", "age": 16},
    {"name": "c", "age": 5}
]
list2 = sorted(list2, key=itemgetter("age"))
print(list2)


使用列表实现 栈 和 队列

栈:先进后出

队列:先进先出


给定两个 list A,B,找出其中相同的元素,不同的元素

print(set(A)&set(B))
print(set(a)^set(B))

二维数组转一维

list1 = [[1,2,3],[4,5,6],[7,8,9]]

list2 = [y for x in list1 for y in x]
print(list2)

生成二维数组

# [[1,2,3],[2,4,6],[3,6,9]]

list3 = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(list3)

list2 = []
for i in range(1, 4):
    list1 = []
    for j in range(1, 4):
        list1.append(i * j)
    list2.append(list1)


找到指定范围内的质数的数量

"""
统计所有小于等于非负整数 n 的质数的数量

质数:只能被 1 和自己本身整除的自然数

示例:
输入:10
输出:4
解释:小于等于 10 的质数一共有 4 个,分别是:2,3,5,7

筛选法又称筛法:
具体做法是:先把 N 个自然数按次序排列起来。1 不是质数,也不是合数,要划去。
第二个数 3 是质数留下来,而把 2 后面所有能被 2 整除的数都划去;
2 后面第一个没划去的数是 3,把 3 留下,再把 3 后面所有能被 3 整除的数都划去;
3 后面第一个没划去的数是 5,把 5 留下,再把 5 后面所有能被 5 整除的数都划去;
这样一直做下去,就会把不超过 N 的全部合数都筛选掉,留下的就是不超过 N 的全部质数。

这种方式称为  埃拉托斯特尼的方法 叫做 埃拉托斯特尼筛选法,简称“筛法”
"""
def f(n):
    list1 = [True] * (n + 1)
    i = 2
    while i * i < n:
        if list1[i] == True:
            j = i * i
            while j <= n:
                list1[j] = False
                j += i
        i += 1

    count = 0
    for i in range(2, n + 1):
        if list1[i] == True:
            count += 1
    return count
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值