python面试题

1.运算符is==有什么区别

is比较两个变量内存地址是否相同
==比较的是两个变量的取值时候相同

2.a = {1,2,3} b = {3,2,1} a==b ? a is b

a == b
True
因为集合无序
a is b
False

3.python对象中的浅拷贝深拷贝

import copy

a = ('a', 'b', 'c')
b = a
c = copy.copy(a)
d = copy.deepcopy(a)

print(b,c,d)

print(id(b))
print(id(c))
print(id(d))
[*]('a', 'b', 'c') ('a', 'b', 'c') ('a', 'b', 'c')
[*]2186705592112
[*]2186705592112
[*]2186705592112
a = {'a', 'b', 'c'}
b = a
c = copy.copy(a)
d = copy.deepcopy(a)

print(b,c,d)

print(id(b))
print(id(c))
print(id(d))

[*]{'b', 'a', 'c'} {'b', 'a', 'c'} {'b', 'a', 'c'}
[*]1469252858376
[*]1469252859272
[*]1469252859048
a = ['a', 'b', 'c']
b = a
c = copy.copy(a)
d = copy.deepcopy(a)

print(b,c,d)

print(id(b))
print(id(c))
print(id(d))
[*]['a', 'b', 'c'] ['a', 'b', 'c'] ['a', 'b', 'c']
[*]2160769994504
[*]2160769993544
[*]2160770037128

因为列表, 字典, 集合是不可变对象

元组, 字符串,数值型, float是不可变对象

4a = [1,2,3,4,5,6,7,8,9,10]用一行代码将其中奇数放入新列表

b = [i for i in a if i%2==1]
filter(lambda x:x>=0, a)
这样返回的是一个生成器对象
要转换一下
list(filter(lambda x:x>=0, a))

相对来说。列表推导式省时间

5.用一行代码展开一个二维列表

lists = [[1,2], [3,4], [5,6]]
a = [j for i in lists for j in i]
print(a)

6.1 2 3 4 5能组成60个无重复3位数,一一列出

ret = [str(x)+str(y)+str(z) for x in range(1,6) for y in range(1,6) for z in range(1,6) if x!=y and x!=z and y!=z]

7.将字典键值颠倒并返回新字典

随机生成一个字典
randdict = {x:randint(60,100) for x in "adnvkerio"}
d = {'a': 88, 'd': 66, 'n': 60, 'v': 80, 'k': 80, 'e': 69, 'r': 97, 'i': 86, 'o': 68}
ret = {v:k for k,v in d.items()}

8.将字典元素的值按降序排列

d = {'a': 88, 'd': 66, 'n': 60, 'v': 80, 'k': 80, 'e': 69, 'r': 97, 'i': 86, 'o': 68}
ret = sorted(d.items(), key=lambda x:[1], reverse=True)
或者
sorted(zip(d.values(), d.keys()), reverse=True)

或者

sorted([(v,k) for k,v in d.items()], reverse=True)

9.将列表反转

a = ['o', 'o', 'l', 'f', ';', 'k', ';', 'f', 'a', 'd', 'd', 'a', 'j', 'f', 'v', 'n', 'f', 'h', 'a', ';', 'f', 'k', 'j', 'l', 'a']
print(a[::-1])

10.zip

zip()函数在运算时,会以一个或者多个序列作为参数,返回一个元祖的列表

a = [4,5]
b = [1,2]
c = [i for i in zip(a, b)]

>[(4, 1), (5, 2)]

11.a=(1,)b=(1),c=(“1”) 分别是什么类型的数据?

在这里插入图片描述

12.二维数组展平

a = [[1,2], [3,4], [5,6]]
x = [j for i in a for j in i]
print(x)

13.[1,2,3] + [4,5,6]

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

14.求三个值

def fn(k, v, dic={}):
    dic[k] = v
    print(dic)


fn('one', 1)
fn('two', 2)
fn('three', 3, {}){'one': 1}
{'one': 1, 'two': 2}
{'three': 3}
fn("one",1)直接将键值对传给字典;
fn("two",2)因为字典在内存中是可变数据类型,所以指向同一个地址,传了新的额参数后,会相当于给字典增加键值对
fn("three",3,{})因为传了一个新字典,所以不再是原先默认参数的字典

15.将[i for i in range(3)]改成生成器

a = (i for i in range(3))
print(type(a))

生成器是特殊的迭代器,
1)列表表达式的【】改为()即可变成生成器
2)函数在返回值得时候出现yield就变成生成器,而不是函数了;

16.sortsorted对比

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值