当前位置: 首页 > 后端技术 > Python

Python30秒学会的漂亮短代码

时间:2023-03-26 19:46:08 Python

今天给大家带来30秒学会的代码片段。这些代码潜力无限,蕴含着丰富的python编程思想。它们具有广泛的应用范围,并且非常容易学习简单。1、“二维列表”解释:根据给定的长宽,和初始值,返回一个二维列表。definitialize_2d_list(w,h,val=None):return[[valforxinrange(w)]foryinrange(h)]示例:>>>initialize_2d_list(2,2)[[None,None],[无,无]]>>>initialize_2d_list(2,2,0)[[0,0],[0,0]]2。函数切割数组解释:用一个函数作用于一个数组的每一个元素,使这个数组被切割成两部分。例如,如果应用于元素的函数返回的值为True,则元素被切入第一部分,否则被切入第二部分。defbifurcate_by(lst,fn):return[return[xforxinlstiffn(x)],[xforxinlstifnotfn(x)]]示例:>>>bifurcate_by(['beep','boop','foo','bar'],lambdax:x[0]=='b')[['beep','boop','bar'],['foo']]3."intersection"Point"解释:两个数组通过一个函数apply后,从第一个数组中提取公共元素的原始元素,组成一个新数组defintersection_by(a,b,fn):_b=set(map(fn,b))return[itemforiteminaiffn(item)in_b]示例:>>>frommathimportfloor>>>intersection_by([2.1,1.2],[2.3,3.4],floor)[2.1]4.最大值下标的解释:返回数组中最大值的下标。defmax_element_index(arr):returnarr.index(max(arr))例子:>>>max_element_index([5,8,9,7,10,3,0])45.数组对称差解释:求两个不同的数组中的元素组合成一个新数组。defsymmetric_difference(a,b):_a,_b=set(a),set(b)return[itemforiteminaifitemnotin_b]+[itemforiteminbifitemnotin_a]示例:>>>symmetric_difference([1,2,3],[1,2,4])[3,4]6.“间隔数”的解释:如果num落在一个数字范围内,则返回num,否则返回distance从这个范围的最近边界:defclamp_number(num,a,b):returnmax(min(num,max(a,b)),min(a,b))示例:>>clamp_number(2,3,10)3>>clamp_number(7,3,10)7>>clamp_number(124,3,10)107.键值映射解释:使用它们的键重新创建对象,并运行函数为每个对象的创建值钥匙。\使用dict.keys()遍历对象的key,通过函数生成新的value。defmap_values(obj,fn):ret={}forkeyinobj.keys():ret[key]=fn(obj[key])returnret示例:>>>users={...'fred':{'user':'fred','age':40},...'pebbles':{'user':'pebbles','age':1}...}>>>map_values(users,lambdau:u['age']){'fred':40,'pebbles':1}>>>map_values(users,lambdau:u['age']+1){'fred':41,'pebbles':2}8、大小写转换解释:将英文单词首字母大写转为小写。\upper_rest参数:设置是否对除首字母以外的其他字母进行大小写转换。defdecapitalize(s,upper_rest=False):returns[:1].lower()+(s[1:].upper()ifupper_restelses[1:])示例:>>>decapitalize('FooBar')'fooBar'>>>decapitalize('FooBar',True)'fOOBAR'9、同键求和解释:对列表中各个字典中具有相同键值的对象求和。defsum_by(lst,fn):returnsum(map(fn,lst))示例:>>>sum_by([{'n':4},{'n':2},{'n':8}],lambdav:v['n'])1410.一行代码求出现次数解释:求列表中某个数出现次数的总和。defcount_occurrences(lst,val):returnlen([xforxinlstifx==valandtype(x)==type(val)])示例:>>>count_occurrences([1,1,2,1,2,3],1)311.将数组再次分组,按照需要的大小细分一个list:效果如下:chunk([1,2,3,4,5],2)#[[1,2],[3,4],5]return,map的第二个参数是一个列表,map会使用列表中的每个元素去调用第一个参数的function函数,并返回包含每个元素的function函数函数返回一个新的值列表。12、数字转数组也是关于map的一个应用,将整数拆分为数组:defdigitize(n):returnlist(map(int,str(n)))效果如下:digitize(123)#[1,2,3]它把整数n转成字符串后,也会自动序列化拆分字符串,最后把元素应用到map的第一个参数,转成整数返回。13.非递归斐波那契记住斐波那契数列,前两个数的和就是第三个数的值,比如0,1,1,2,3,5,8,13...。如果你用递归实现这个算法,效率很低。我们使用非递归的方法来实现:效果如下:fibonacci(7)#[0,1,1,2,3,5,8,13]看起来很简单,但是思路必须四处走走。14.批量统一变量名或字符串格式带下划线的字符串。效果如下:snake('camelCase')#'camel_case'snake('sometext')#'some_text'snake('some-mixed_stringWithspaces_underscores-and-hyphens')#'some_mixed_string_with_spaces_underscores_and_hyphens'snake('AllThe-smallThings')#"all_the_small_things"re.sub用于替换字符串中的匹配项。这其实是“套娃”的一个用法,一开始可能不太好理解,需要慢慢理解。第一个替换是将s字符串中的'-'替换为''。第二次替换是针对第一个被替换的字符串,将匹配'([A-Z]+)'正则表达式的字符段(全部大写的单词)替换为r'\1',即每个单词用空格隔开。第三次替换是针对第二次替换后的字符串,用r'\1匹配'(A-Z+)'正则表达式的字符段(即第一个字母大写,其他字母小写)'替换,也用空格分隔单词。这是我们文章的结尾。如果喜欢今天的Python实战教程,可以关注公众号:Python编程学习圈,了解更多编程技巧!