常见python面试题

1 正负数排序

# 一行代码通过filter和lambda函数输出以下列表索引为奇数对应的元素list_a =[12,213,22,2,2,2,22,2,2,2,32]

#[213,2,2,2,2]
list_a= [12,213,22,2,2,2,22,2,2,2,32]

print([y[1] for y in filter(lambda x: x[0]% 2== 1,( (i,list_a[i]) for i in range(len(list_a))))])

2 深浅拷贝1

import copy

a = [1, 2, 3, [4, 5],6]
b= a
c = copy.copy(a)
d = copy.deepcopy(a)
b.append(10)
c[3].append(11)
d[3].append(12)
print(a)
print(b)
print(c)

3 深浅拷贝2

'''
阅读以下代码,并写出程序的输出结果alist =[2,4,5,6,7]
for var in alist:
if var % 2= 0:
alist.remove(var)
wnsoahcc
print(alist)

'''
alist =[1,2,4,5,6,7]
for var in alist:
    if var % 2 == 0:
        alist.remove(var)
print(alist)
# 这是一个坑位,当第一个循环开始的时候i指向0坐标,也就是2,满足被删掉了。当要进行第二个的时候,3向前移动到了0
# 的位置,i却指向了1,那么4就被错过了,所以这样删除删不干净

# 解决办法
# 使坐标和相应的数值不改变,那么就可以生成一个相同的列表,用上面的坐标,删除下面的数值
alist =[1,2,4,5,6,7]
for var in alist[:]:
    if var % 2 == 0:
        alist.remove(var)
print(alist)

4 交并集

'''
给定两个list,A,B请用pvthon找出A,B中相同的元素,A,B中不同的元素

'''
A = [1,2,3]
B = [2,3,4]
# 所有交并集的相关操作都去找set集合

a = set(A)
b = set(B)
print(a & b)
print(a ^ b)
print(a | b)
print(a - b)

5 循环删除

'''
阅读以下代码,并写出程序的输出结果alist =[2,4,5,6,7]
for var in alist:
if var % 2= 0:
alist.remove(var)
wnsoahcc
print(alist)

'''
alist =[1,2,4,5,6,7]
for var in alist:
    if var % 2 == 0:
        alist.remove(var)
print(alist)
# 这是一个坑位,当第一个循环开始的时候i指向0坐标,也就是2,满足被删掉了。当要进行第二个的时候,3向前移动到了0
# 的位置,i却指向了1,那么4就被错过了,所以这样删除删不干净

# 解决办法
# 使坐标和相应的数值不改变,那么就可以生成一个相同的列表,用上面的坐标,删除下面的数值
alist =[1,2,4,5,6,7]
for var in alist[:]:
    if var % 2 == 0:
        alist.remove(var)
print(alist)

6 字符串压缩

# 把字符串aaabbcccd这种形式的字符串压缩成a3b2c3d1这种形式

s ="aaabbcccddddddeffffabcddddddfffffee"

f= s[0]
count = 1
result = ""
for i in range(1,len(s)):#循环字符串的索引
    if s[i] == f:
        count += 1
    else:
        #把f和count记录
        result +=f +str( count)  #更换f和count
        f=s[i]
        count = 1
result += f + str(count)
print(result)

7 判断完数算法

# python一个数如果恰好等于它的因子之和,这个数就称为完数。例如:6 = 1 + 2+3.编程找出1000以内的所有完数"""
for n in range(1,1000):
    n_lst =[]
    for i in range(1,n):#1 2 3 4 567
        if n% i ==0:
            n_lst.append(i)
    if sum(n_lst)==n:
        print(n,'是一个完数',"因子有",n_lst)

8 巧用二进制

'''
输入一个字符串,输出该字符串中字符的所有组合.例如:
输入:1,2,3
输出:1,2,3,12,13,23,123(组合数,不考虑顺序,所以12和21是等价的)

'''
s = "1,2,3,4,5"
lst = s.split(",")
big_result = []
for i in range(1,2**len(lst)):
    ss = format(i,f"0{len(lst)}b")  #格式化成定长二进制

    #映射关系,把所有1位置的数据保存
    result = []
    for j in range(len(ss)):
        if ss[j] == "1":
            result.append(lst[j])
    big_result.append(int("".join(result)))
print(big_result)

9 字符转换切割算法

'''
对于一个非空字符串,判断其是否可以有一个子字符串重复多次组成,字符串只包含小写字母且长度不超过1000
示例1:
输入:"abab”
输出: True,输入可由ab重复2次组成
in
示例2:
输入:"abcabcabc"
输出: True,输入可由abc重复3次组成示例3:
输入:"aba"输出:False

'''
s = input(">>>>>>>:")
for i in range(2,len(s)//2+1):
    lst = s.split(s[:i])
    lst = [item for item in lst if item !='']
    if not lst:
        print(f"真,输入由{s[:i]}重复{len(s)/i}次组成")
        break
else:
    print("假")

10 filter用法

# 一行代码通过filter和lambda函数输出以下列表索引为奇数对应的元素list_a =[12,213,22,2,2,2,22,2,2,2,32]

#[213,2,2,2,2]
list_a= [12,213,22,2,2,2,22,2,2,2,32]

print([y[1] for y in filter(lambda x: x[0]% 2== 1,( (i,list_a[i]) for i in range(len(list_a))))])

11 and or 用法

# 逻辑运算

v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or False and 1
print(v1)
print(v2)
print(v3)
print(v4)
print(v5)
print(v6)
''''
考点:
运算顺序
() =》 not =》 and =》 or

    a and b:
        如果a表示True,那么结果就是b
        如果a表示Fause,那么结果就是a
    a or b:
        如果a表示Fause,那么结果就是b
        如果a表示Turue,那么结果就是a
'''

12 extend 用法

# 有一个多层嵌套的列表a=【1,2,【3,4,【234,234】】】,请写出一段代码实现遍历a中每一个元素并打印出来
A = [1,2,[3,4,[56,78,[10,201]]]]
for i in A:
    if type(i) == list:  #如果遍历的是列表就。。。。
        A.extend(i)
    else:
        print(i)

13 formkeys

v = dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v)
v['k2'] = 888
print(v)

14 stddefault

# 将列表内的元素,根据位数合并成字典例:lst = [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,4294967296]
#输出:
# {
# 1:[1,2,4,8],
# 2:[16,32,64],
# 3: [128,256,512],
# 4:[1024,2048,4096,8192],
# 5: [ 16384,32768,65536],
# 6:[ 4294967296]

dic={}#存放最终结果
lst = [9,2.4,8,16.32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,4294967296]
for item in lst:
    it = str(item)
    if len(it)<6:
        dic.setdefault(len(it),[]).append(item)
    else:
        dic.setdefault(6,[]).append(item)
print(dic)

15 一行代码去重

# 一行代码实现删除列表中重复的值
# 借助set集合,set集合的数据是不重复的
lst = ['1','2','3','1']
s = list(set(lst))
print(s)

16 一行代码实现代码交换

# 使用一行代码实现代码交换
a = 10
b = 20
# 传统方法,使用中间变量
c = a
a = b
b = c
print(a)
print(b)
# 使用一行代码实现
aa =10
bb =20
aa,bb = bb,aa
print(aa)
print(bb)

17 三目交换

# 三目运算编写格式
# () if () else ()
# 计算a,b 中比较大的数
a =10
b = 20
if a > b :
    c=a
else:
    c=b
print(c)

c = a if a > b else b
print(c)

18 元素元组

# a = [1,2,3]
# b = [(1),(2),(3)]
# c = [(1),(2),(3),]
# 问:abc有什么区别


a = (1)  #默认情况下表示的是运算的优先级,也就是小括号
print(type(a))
# <class 'int'>

# 如果python中的元组只存储一个数据,那么元素的最后面必须加一个逗号,表示跟元组运算区别开来
b = (1,)
print(type(b))
# <class 'tuple'>

19 布尔值为Fause的值

# 列举出布尔值为Fause的常见值
# 0
# []
# ""
# tuple()
# dict()
# set()

# # 常见的数据类型中所有表示空的东西都可以称之为Fause

# print(m)

20 合并算法

# 有两个字符串a和b,每个字符串都是由逗号分割开的一些字符
a = [
    'a,1',
    'b,3,22',
    'c,3,4'
]
b = [
    'a,2',
    'b,1',
    'd,2'
]
# 按每个字符串得到第一个值,合并a和b到c
c = [
    'a,1,2',
    'b,3,22,1',
    'c,3,4',
    'd,2'
]
for bi in range(len(b)):  #bi是b中元素的索引
    for ai in range(len(a)):  #ai是a中元素的索引·
        if b[bi][0] == a[ai][0]:
            a[ai] += b[bi][1:]  #让a中的ai元素拼接上b中元素的内容
            break
    else:  #b中元素不在中出现,此时没有经过break
         a.append(b[bi])
print(a)

21 字符串翻转

# 如何实现字符串翻转
name = 'abcde'
name = name[::-1]#两个冒号属于是从尾到头
print(name)

22 字符串列表转换

# 如何实现“1,2,3”变成['1','2','3']
# 如何实现['1','2','3']变成“1,2,3”
s = "1,2,3"#字符串
# splist()字符串的切割
lst = s.split(',')
print(lst)

# 使用列表推导式来实现第二问
lst2 = [int(i) for i in lst]
print(lst2)

23 数组降维

'''请尽量用简洁的方法把二维数组转换成一维数组例如:
转换前
lst = [[1,2,3],[4,5,6],[7,8,9]转换后
lst =[1,2,3,4,5,6,7,8,9]
'''
# 第一种,使用reduce
from functools import reduce
lst = [[1,2,3],[4,5,6],[7,8,9]]
lst2 = list(reduce(lambda x,y:x+y,lst))
print(lst2)


# 第二种,使用chain
from itertools import chain
lst = [[1,2,3],[4,5,6],[7,8,9]]
lst2 = list(chain.from_iterable(lst))
print(lst2)

# 第三种,使用sum相加
lst = [[1,2,3],[4,5,6],[7,8,9]]
lst2 = sum(lst,[])
print(lst2)

24 生成平方列表

# 如何生使用一行代码实现生成【1,4,9,16,25,36,49,64,81,100】
lst = [i**2 for i in range(1,11)]
print(lst)

25 组成不同的三位数

# 1,2,3,4,5能够组成多少个互不相同的无重复的四位数
nums = {1,2,3,4,5}
lst =[]
for i in range(100,1000):#保证全部都是三位数
    s = set(int(j) for j in str(i))#使用集合的方式,两个集合相减就结果是前面集合有后面集合没有的数
    if not s - nums:#这样就排除了nums集合里面没有的数字集合,然后添加到列表里面
       lst.append(s)
print(len(lst))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值