以下三元表达式,列表生成式,字典生成式可以让代码显得更加简单,其实不一定使用,有很多替代方法
三元表达式:
语法:res =条件成立时的返回值 if 条件 else 条件不成立时的返回值
示例代码:取出两个值的最大值
# 传统函数写法 def max(x, y): if x>y: return x else: return y res = max(1,2) # 三元表达式写法 x = 1 y = 2 res = x if x>y else y
列表生成式:
示例代码:取出1到10中大于3的值
示例代码:将列表中以demo结尾的成员取出,并全部大写
# 传统写法 list1 = [] list2 = [] for i in range(10): if i>3: list1.append(i) print(list1) # 列表生成式 list2 = [i for i in range(10) if i > 3] print(list2)
# 列表生成式例子2 names =['a_demo', 'b', 'c_demo', 'd_demo'] names = [name.upper() for name in names if name.endswith('demo')] print(names)
字典生成式:
示例代码:把列表转换成字典
# 要求将下列列表转换成字典 info=[ ['name', 'cooky'], ['age', 18], ['sex', 'male'] ] d={} # 传统方法 for item in info: d[item[0]] = item[1] print(d) # 字典生成式 d = {item[0]: item[1] for item in info} print(d)
#把d中的key全部变成大写
d = {k.upper():v for k,v in d.items()}
print(d)
递归:在调用一个函数的过程中又直接或间接的调用自己
示例代码:打印出如下嵌套列表中的值
list1 = [1, [2, [3, [4, [5, [6, [7, [8]]]]]]]] def tell(l): for item in l: if type(item) is not list: print(item) else: tell(item) tell(list1)
示例代码:递归算法的应用----》二分法,找出nums列表中指定的数字
nums = [3, 11, 13, 15, 23, 27, 43, 51, 72, 81, 93, 101] def binary_search(nums, find_num): print(nums) if nums.__len__() == 0: print('not exist') return mid_index = len(nums)//2 if find_num > nums[mid_index]: rirht_nums = nums[mid_index+1:] binary_search(rirht_nums, find_num) elif find_num < nums[mid_index]: left_nums = nums[:mid_index] binary_search(left_nums, find_num) else: print('find it')
匿名函数:只用一次以后不会再用的函数
示例代码:实现两个数相加
print((lambda x, y: x + y)(1, 2))
示例代码:字典实现按value值排序
salaries = { 'name1': 100, 'name2': 50, 'name3': 200, 'name4': 150 } print(max(salaries, key=lambda x: salaries[x])) print(min(salaries, key=lambda x: salaries[x])) print(sorted(salaries, key=lambda x: salaries[x]))
map功能:可以设置map后的值
names = ['name1', 'name2', 'name3'] res = map(lambda x: x+'_map', names) print(list(res)) # 可以用列表生成式替代 l = [name+'_map' for name in names] print(l)
filter:删掉不关心的值
names = ['name1_filter', 'name2', 'name3_filter'] res = filter(lambda x: x.endswith('filter'), names) print(list(res)) l = [name for name in names if name.endswith('filter')] print(l) l = (name for name in names if name.endswith('filter')) print(list(l))
reduce:合并值
# reduce l = ['a', 'b', 'c', 'd', 'e'] from functools import reduce res = reduce(lambda x, y: x+y, l, 'AAA') print(res) res = reduce(lambda x, y: x+y, range(0, 101)) print(res)