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

这14个短代码蕴含着丰富的Python编程思维

时间:2023-03-21 10:18:02 科技观察

今天给大家带来30秒就能学会的代码片段。这些代码潜力无限,蕴含着丰富的python编程思想,有着广泛的应用。学习起来非常简单。1、“二维列表”解读:根据给定的长宽,以及初始值,返回一个二维列表。definitialize_2d_list(w,h,val=None):return[[valforxinrange(w)]foryinrange(h)]示例:>>>initialize_2d_list(2,2)[[None,None],[None,None]]>>>initialize_2d_list(2,2,0)[[0,0],[0,0]]2。函数切割数组解释:用一个函数作用于数组的每一个元素,使数组切割成两部分。例如,如果应用于元素的函数返回的值为True,则元素被切入第一部分,否则被切入第二部分。defbifurcate_by(lst,fn):return[[xforxinlstiffn(x)],[xforxinlstifnotfn(x)]]示例:>>>bifurcate_by(['beep','boop','foo','bar'],lambdax:x[0]=='b')[['嘟嘟','boop','bar'],['foo']]3。“交点”的解释:两个数组被一个函数应用后,从第一个数组中提取公共元素的原始元素,组成一个新的数组。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],地板)[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,否则返回最接近这个范??围的边界: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()遍历对象的键,通过函数生成新的值。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):返回[: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。Arrayregrouping将一个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-small_Things')#"all_the_small"re.sub用于替换字符串中的匹配项。这其实是“套娃”的一个用法,一开始可能不太好理解,需要慢慢理解。第一个替换是将s字符串中的'-'替换为''。第二次替换是针对第一个被替换的字符串,将匹配'([A-Z]+)'正则表达式的字符段(全部大写的单词)替换为r'\1',即每个单词用空格隔开。第三次替换是针对第二次替换后的字符串,针对匹配'([A-Z][a-z]+)'正则表达式的字符段(即第一个字母大写,其他字母小写)使用r'\1'替换也是用空格分隔单词。我们的文章到此结束。