引入

# 针对不同情况返回不同的值
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('找到')

 

posted on 2023-11-25 20:13  认真的六六  阅读(15)  评论(0编辑  收藏  举报