引入
# 针对不同情况返回不同的值 def func(x, y): if x > y: return x else: return y res = func(2, 1) print(res)
上述是我们以前得写法,发现代码比较多,有没有什么其他方法呢?
。
。
【三元表达式】
三元表达式用于在单个表达式中产生两个结果之一的条件运算符。这个条件运算符需要三个操作数,所以叫做三元运算符,又因为它和某些语言中的if-else语句有类似之处。
三元表达式的一般形式为:语法格式:条件成立时返回的值 if条件判断 else 条件不成立时返回的值
x = 2 y = 1 res = x if x > y else y print(res)
这种表达式提供了一种简洁的方式来进行条件判断并赋值,无需使用完整的if-else语句。
。
。
。
【列表生成式】
。
。
。
【其他生成式】
字典生成式 item = {("name", 'jinhao'), ("age",'26'), ("gender",'woman')} dic = {k: v for k, v in item if k != "gender"} print(dic) ============================= 集合生成式 keys = {'name', 'age', 'gender'} set1 = {key for key in keys} print(set1, type(set1)) ================================= # 生成器表达式(不是元组表达式) with open(r'C:\Users\xxx\PycharmProjects\pythonProject\Day19\p.txt', mode='rt', encoding='UTF-8') as f: res = sum([len(line) for line in f]) print(res) 第二种写法 默认是生成器(去掉【】) res = sum(len(line) for line in f) print(res) ===================================
。
。
。
【二分法】
算法:是高效解决问题得办法
# 需求:有一个按照从小到大顺序排列的数字列表,在列表中找到我们想要的那个数字
numes = [-3, 4, 7, 10, 13, 24, 77, 88]
find_nume = 4
1 # 方案一:效率低,要一遍一遍筛选 2 for nume in numes: 3 if find_nume == nume: 4 print('找到了') 5 break 6 7 8 -------------------------------------------------------- 9 # 方案二:二分法 10 11 12 def binary_search(find_nume, numes): # f是产生的新列表 13 print(numes) # 每次执行都把执行结果打印出来 14 mid_val = len(numes) // 2 # mid_val=找到列表的中间索引(//取结果的整数部分) 15 mod_val = numes[mid_val] # 中间值=列表当中所在的中间索引位置 16 if find_nume > mod_val: # 如果要找的值>中间值a 17 right_list = numes[mid_val + 1:] # 那么列表=列表切片右半部分(那么要找的数在列表的右半部分) 18 binary_search(find_nume, right_list) # 调用右边列表 19 elif find_nume < mod_val: # 二次判断,如果要找的数<中间值 20 left_l = numes[:mid_val + 1] # 列表 = 列表切片左半部分(那么要找的数在列表的左半部分) 21 binary_search(find_nume, left_l) 22 else: 23 print('找到')