1.链式比较
i=3
print(1<i<3)
print(1<i<=3)
2.不用else和if实现计算器
from operator import *
def calculator(a,b,k):
return{
"+":add,
"-":sub,
"*":mul,
"/":truediv,
"**":pow
}[k](a,b)
calculator(1,2,"+")
calculator(3,4,"**")
3.函数链
from operator import (add,sub)
def add_or_sub(a,b,oper):
return (add if oper=="+" else sub)(a,b)
add_or_sub(1,2,"+")
4.求字符串的字节长度
def str_byte_len(mystr):
return(len(mystr.encode("utf-8")))
str_byte_len("i love python")
str_byte_len("字符")
5.寻找n次出现的位置
def search_n(s,c,n):
size=0
for i, x in enumerate(s):
if x==c:
size+=1
if size==n:
return i
return -1
print(search_n("fdasadfadf","a",3))
print(search_n("fdasadfadf","a",30))
6.去掉最高最低求平均
def score_mean(lst):
lst.sort()
lst2=lst[1:len(lst)-1]
return round(sum(lst)/len(lst2),2)
score_mean([9.1,9.0,8.1,9.7,19,8.2,8.6,9.8])
7.交换元素
def swap(a,b):
return b,a
swap(1,0)
8.二分查找
def binarySearch(arr,x):
left=0
right=len(arr)-1
while left<=right:
# (left+right)/2容易溢出,但python会强转long,不会溢出
mid=int(left+(right-left)/2)
if arr[mid]==x:
print("found %d 在索引位置%d" %(x,mid))
return mid
elif arr[mid]<x:
left=mid+1
print("区间缩小为[%d,%d]" %(mid+1,right))
elif arr[mid]>x:
right=mid-1
print("区间缩小为[%d,%d]" %(left,mid-1))
return -1
binarySearch([1,2,3,4,5,6,7,8,9],3)
9.距离矩阵
import numpy as np
x,y=np.mgrid[0:5,0:5]
list(map(lambda xe,ye:[(ex,ey) for ex,ey in zip(xe,ye)],x,y))
10.打印乘法表
for i in range(1,10):
for j in range(1,i+1):
print('{0}*{1}={2}'.format(j,i,j*i),end="\t")
print()
11.嵌套数组完全展开
from collections.abc import *
def flatten(input_arr,output_arr=None):
if output_arr is None:
output_arr=[]
for ele in input_arr:
# isinstance判断类型,Iterable可迭代类型
if isinstance(ele,Iterable):
flatten(ele,output_arr)
else:
output_arr.append(ele)
return output_arr
flatten([[1,2,3],[4,5],[6,7]])
12.list分组
from math import ceil
def divide(lst,size):
if size<=0:
return [lst]
# ceil向下取整
return [lst[i * size : (i+1)*size] for i in range(0,ceil(len(lst)/size))]
divide([1,3,5,7,9],2)
13.单列分割为多列
import pandas as pd
import os
# file_folder="此处输入待处理的文件夹位置"
# files=os.listdir(file_folder)
# for file in files:
# file_loc=file_folder+"/"+file
# raw_data=pd.read_csv(file_loc,header=None)
# data_after_process=raw_data.iloc[:,0].str.split(";",expand=True)
# data_after_process_loc="处理完毕后的数据存储位置"+"/"+file
# data_after_process.to_csv(data_after_process_loc,index=None,header=None)
14.生成fibonacci序列前n项(普通版)
def fibonacci(n):
if n<=1:
return [1]
fib=[1,1]
while len(fib)<n:
fib.append(fib[len(fib)-1]+fib[len(fib)-2])
return fib
fibonacci(5)
15.生成fibonacci序列前n项(生成器版)
def fibnoacci(n):
a,b=1,1
for _ in range(n):
yield a
a, b = b, a+b
list(fibonacci(5))
16.过滤false值
def filter_false(lst):
return list(filter(bool,lst))
filter_false([None,0,False,"",[],"ok",[1,2]])
17.对象转换为可迭代类型
from collections.abc import Iterable
def cast_iterable(val):
return val if isinstance(val,Iterable) else [val]
print(cast_iterable('foo'))
print(cast_iterable(12))
print(cast_iterable({"foo":12}))
18.求更长列表
def max_length(*lst):
return max(*lst,key=lambda v:len(v))
print(f"更长的列表是{max_length([1,2,3],[4,5,6,7],[8])}")
19.出现次数最多的元素
def max_frequency(lst):
return max(lst,default="列表为空",key=lambda v: lst.count(v))
lst=[1,3,3,2,1,1,2]
r=max_frequency(lst)
print(f"{lst}中出现次数最多的元素为:{r}")
20.求多个列表的最大值
def max_lists(*lst):
return max(max(*lst,key=lambda v:max(v)))
print(max_lists([1,2,3],[6,7,8],[4,5]))
21.列表重复元素检查
def has_duplicates(lst):
return len(lst)==len(set(lst))
x=[1,1,2,2,3,2,3,4,5,6]
has_duplicates(x)
22.求列表中的重复元素
from collections import Counter
def find_all_duplicates(lst):
c=Counter(lst)
return list(filter(lambda k: c[k]>1,c))
find_all_duplicates([1,2,2,3,3,4])
23.浮点数等差数列
def rang(start,stop,n):
start,stop,n=float("%.2f" % start),float("%.2f" % stop),int("%.d" % n)
step=(stop-start)/n
lst=[start]
while n>0:
start,n=start+step,n-1
lst.append(round(start,2))
return lst
rang(1,8,10)
24.列表按条件分组
def bif_by(lst,Fn):
return [[x for x in lst if Fn(x)],[x for x in lst if not Fn(x)]]
records=[25,89,31,34]
bif_by(records,lambda x:x<80)
25.求重复的元素及次数
from collections import Counter
lst=[2,"b",2,3,"d","m","n","n"]
a=Counter(lst)
[x for x in a.items() if x[1]>1]
26.多序列运算函数
lst1=[1,2,3,4,5,6]
lst2=[3,4,5,6,3,2]
list(map(lambda x,y: x*y+1,lst1,lst2))
27.字典最大对
def max_pairs(dic):
if len(dic)==0:
return dic
max_val=max(map(lambda v:v[1],dic.items()))
return [item for item in dic.items() if item[1]==max_val]
max_pairs({"a":-10,"b":5,"c":3,"d":5})
28.合并字典
def merge_dict2(dic1,dic2):
return {**dic1,**dic2}
merge_dict2({"a":1,"b":2},{"c":3})
29.求字典前n个最大值
from heapq import nlargest
def topn_dict(d,n):
return nlargest(n,d,key=lambda k: d[k])
topn_dict({"a":10,"b":8,"c":9,"d":10},3)
30.字母同顺序不同
from collections import Counter
def anagram(str1,str2):
return Counter(str1)==Counter(str2)
# 神奇的变位词
anagram("eleven+two","twelve+one")