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))