当前位置: 首页 > 科技观察

30段极简Python代码:这些技巧你get到了吗?

时间:2023-03-12 16:58:36 科技观察

如何学Python最快,当然是实践各种小项目。只有自己思考、自己写,才能记住规则。本文是30个极简任务,初学者可以尝试自己实现;本文也是30段代码,Python开发者也可以看看有没有什么意想不到的用法。Python是机器学习中采用最广泛的编程语言,其最重要的优势是易于编程。如果读者已经具备一些基本的Python语法知识,这篇文章可能会给你一些启发。作者简单概括了30段代码,这些都是常用的非常实用的技巧,几分钟就可以从头到尾浏览一遍。1.重复元素判断下面的方法可以检查给定列表中是否有重复元素,它会使用set()函数来移除所有重复元素。defall_unique(lst):returnlen(lst)==len(set(lst))x=[1,1,2,2,3,2,3,4,5,6]y=[1,2,3,4,5]all_unique(x)#Falseall_unique(y)#True2.字符元素组成判断判断两个字符串的组成元素是否相同。fromcollectionsimportCounterdefanagram(first,second):returnCounter(first)==Counter(second)anagram("abcd3","3acdb")#True3。内存占用下面的代码块可以查看变量variable占用的内存。importsysvariable=30print(sys.getsizeof(variable))#244。字节占用下面的代码块可以检查字符串占用的字节数。defbyte_size(string):return(len(string.encode('utf-8')))byte_size('😀')#4byte_size('HelloWorld')#115.打印N次字符串这个代码块不需要循环语句就可以打印N次字符串。n=2;s="编程";print(s*n);#ProgrammingProgramming6.首字母大写下面的代码块将使用title()方法将字符串中每个单词的首字母大写。s="programmingisawesome"print(s.title())#ProgrammingIsAwesome7。Blocking给定一个特定的大小,定义一个函数根据这个大小来切割列表。frommathimportceildefchunk(lst,size):returnlist(map(lambdax:lst[x*size:x*size+size],list(range(0,ceil(len(lst)/size))))chunk([1,2,3,4,5],2)#[[1,2],[3,4],5]8。Compression此方法可以去除布尔值,例如(False,None,0,""),它使用filter()函数。defcompact(lst):returnlist(filter(bool,lst))compact([0,1,False,2,'',3,'a','s',34])#[1,2,3,'一个',',34]9。解包以下代码段可以将打包对列表解包为两个不同的元组。array=[['a','b'],['c','d'],['e','f']]transposed=zip(*array)print(transposed)#[('a','c','e'),('b','d','f')]10。链式比较我们可以在一行代码中使用不同的操作符来比较多个不同的元素。a=3print(2belseadd)(a,b))#918。检查重复项下面的代码将检查两个列表是否有重复项。defhas_duplicates(lst):returnlen(lst)!=len(set(lst))x=[1,2,3,4,5,5]y=[1,2,3,4,5]has_duplicates(x)#Truehas_duplicates(y)#False19。合并两个词典下面的方法将用于合并两个词典。defmerge_two_dicts(a,b):c=a.copy()#makeacopyofac.update(b)#modifykeysandvaluesofwiththeonesfrombreturnca={'x':1,'y':2}b={'y':3,'z':4}print(merge_two_dicts(a,b))#{'y':3,'x':1,'z':4}在Python3.5或更高版本中,我们还可以合并字典:defmerge_dictionaries(a,b)return{**a,**b}a={'x':1,'y':2}b={'y':3,'z':4}print(merge_dictionaries(a,b))#{'y':3,'x':1,'z':4}20.将两个列表转换为字典下面的方法会将两个列表转换为一个字典。defto_dictionary(keys,values):returndict(zip(keys,values))keys=["a","b","c"]values=[2,3,4]print(to_dictionary(keys,values))#{'a':2,'c':4,'b':3}21.使用枚举我们经常使用For循环来遍历一个列表,也可以枚举列表的索引和值。list=["a","b","c","d"]forindex,elementinenumerate(list):print("Value",element,"Index",index,)#('Value','a','Index',0)#('Value','b','Index',1)#('Value','c','Index',2)#('Value','d','Index',3)22.执行时间以下代码块可用于计算执行特定代码所需的时间。importtimestart_time=time.time()a=1b=2c=a+bprint(c)#3end_time=time.time()total_time=end_time-start_timeprint("Time:",total_time)#('Time:',1.1205673217773438e-05)23.Tryelse我们也可以在使用try/except语句的时候加一个else子句。如果没有错误被触发,这个子句将被执行。try:2*3exceptTypeError:print("Anexceptionwasraised")else:print("ThankGod,noexceptionswerraised.")#ThankGod,noexceptionswerraised。24.元素频率下面的方法将根据元素频率在列表中取最常见的元素。defmost_frequent(list):returnmax(set(list),key=list.count)list=[1,2,1,2,3,2,1,4,2]most_frequent(list)25.下面回文的方法sequence会检查给定的字符串是否为回文序列,它会先将所有字母转为小写,并去除非英文字母符号。最后,它比较字符串与反转字符串是否相等,表示为回文序列。defpalindrome(string):fromreimportsubs=sub('[W_]','',string.lower())returns==s[::-1]palindrome('tacocat')#True26。不用if-else的计算这段代码可以在不使用条件语句的情况下实现加减乘除幂运算。通过字典的数据结构实现:importoperatoraction={"+":operator.add,"-":operator.sub,"/":operator.truediv,"*":operator.mul,"**":pow}print(action['-'](50,25))#2527.Shuffle这个算法会打乱列表元素的顺序,它主要是对新的列表进行Fisher-Yates算法排序:fromcopyimportdeepcopyfromrandomimportrandintdefshuffle(lst):temp_lst=deepcopy(lst)m=len(temp_lst)while(m):m-=1i=randint(0,m)temp_lst[m],temp_lst[i]=temp_lst[i],temp_lst[m]返回temp_lstfoo=[1,2,3]shuffle(foo)#[2,3,1],foo=[1,2,3]28。展开列表会将列表中的所有元素,包括子列表,都展开成一个列表。defspread(arg):ret=[]foriinarg:ifisinstance(i,list):ret.extend(i)else:ret.append(i)返回retspread([1,2,3,[4,5,6],[7],8,9])#[1,2,3,4,5,6,7,8,9]29.交换值交换两个变量的值,不需要任何额外的操作。defswap(a,b):returnb,aa,b=-1,14swap(a,b)#(14,-1)spread([1,2,3,[4,5,6],[7],8,9])#[1,2,3,4,5,6,7,8,9]30。字典的默认值是通过Key获取对应的Value值,可以通过以下方式设置默认值。如果get()方法未设置默认值,则遇到不存在的Key时将返回None。d={'a':1,'b':2}print(d.get('c',3))#3