Python语言这么火,不论是对于刚开始学习的编程小白或者有接触过其他语言(c/c++/java等等)的同学来说,写代码的时候难免会受本身惯性思维或者其他语言的影响!解决问题的思路有的时候会比较单一,其实Python有很多灵活的解法,比如python的几个高阶函数或者特性!
推导式
-
列表推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。
语法:[exp for item in collection if codition]
例子:1-1000内所有偶数组成的列表
2种方法,大家自己对比
1 #one 2 res = [] 3 for i in range(1,1001): 4 if i%2==0: 5 res.append(i) 6 print(res) 7 8 #two 9 10 print([i for i in range(1,1001) if i%2==0])
-
字典推导式,使用一句表达式构造一个新列表,可包含过滤、转换等操作。
语法:{key_exp:value_exp for item in collection if codition}
- 集合推导式
语法:{exp for item in collection if codition}
set = {i for i in range(10)}#结果{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
map函数
map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回
1 lis = [i**2 for i in range(10)] 2 print(lis) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 3 print(list(map(float,lis))) #[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] 4 print(list(map(str,lis))) #['0', '1', '4', '9', '16', '25', '36', '49', '64', '81']
规范字符串
1 name = ['gOd','zIp','NAMe','titLE','filter'] 2 print(list(map(str.title,name))) #['God', 'Zip', 'Name', 'Title', 'Filter']
filter函数
- 筛选序列
- filter(func, lst),将func作用于lst的每个元素,然后根据返回值是True或False判断是保留还是丢弃该元素。
1 lis = range(-10,10) 2 print(list(lis)) #[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3 def fun(x): 4 return x<0 5 print(list(filter(fun,lis))) #[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
zip函数
zip([iterable, ...])
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
1 lis_a = ['a','b','c'] 2 lis_b = ['aa','bb','cc'] 3 lis_c = ['a','b','c','d'] 4 lis_ab = list(zip(lis_a,lis_b)) 5 lis_bc = list(zip(lis_b,lis_c)) 6 print(lis_ab) #[('a', 'aa'), ('b', 'bb'), ('c', 'cc')] 7 print(lis_bc) #[('aa', 'a'), ('bb', 'b'), ('cc', 'c')] 8 print(list(zip(*lis_bc))) #[('aa', 'bb', 'cc'), ('a', 'b', 'c')]
几个zip技巧
1 #列表元素依次连接 2 lis = [i for i in range(10)] 3 print(list(zip(lis[1:],lis[:-1]))) 4 #zip生成字典 5 print(dict(zip('abcd','1234'))) 6 #对应列表元素相加 7 lis1 = [i for i in range(5)] 8 lis2 = [i*2 for i in range(6)] 9 lis3 = [i**2 for i in range(5)] 10 lis = [] 11 for x,y,z in zip(lis1,lis2,lis3): 12 lis.append(x+y+z) 13 print(lis)
最后
其实Python的技巧非常非常多,大家平时的写代码或者读代码的时候要注意收集,特别是有一些精妙的招数,一时半会无法领悟,可以记下来,慢慢思考,总有一天会对你的功力增长大有裨益.
还是那句话,代码一定要多练习才能掌握!大家加油!