python中的条件赋值判断语句语法
作者:Gruce_L、จุ๊บ
这篇文章主要介绍了python条件赋值判断语句语法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
python条件赋值判断语句语法
if - elif - else 语句
如果是普通的三元,if else正常的语句看起来会有些冗余,所以下面有三种写法:
1、c = [a, b] [a > b]
如果a > b为false, 那么就输出a,否则就输出b
2、天平式写法
c = a if a > b else b
如果a > b 为真,则输出a,否则输出b
eg:
summary = content[:100] if item[‘is_html'] else “”
3、赋值语句类似于条件判断语句
(c = a > b and [a] for [b])[0]
a为假的时候,会输出b,当把a变成列表形态[a]时候,可以排除例外,就是当列表怨怒为空时
eg:
summary = item[‘is_html'] and content[:100] or “”
python条件赋值问题
有条件赋值语句
假设有列表 buf = [[1], [2], [5], None, [], [7], ()]
,求buf内的数的和
这样有三种解决办法
sum_buf = 0 for i in buf: if i is not None: sum_buf += i[0]
sum_buf = 0: for i in buf: sum_buf += i[0] if i else 0
sum_buf = sum([i[0] for i in buf if i])
显然第三种用列表推导是最简洁的,但不适用于循环体内操作过于复杂的情况。
这时候第二种带if语句的赋值就更有效,既增加了程序的可读性又没有独立于循环体外增加复杂度
带if语句的赋值
最有代表性的应用场景是做对象操作而不确定变量名是否贴在目标对象上的时候,比如上例中的 None
、 []
、 ()
都是不能做索引操作的
None
、空列表、空元组、空字符串、0的bool值都是False,类通过支持 __bool__
方法就可以使类支持bool运算;从而支持if、while、and等语句
buf = [] a = buf.pop() if buf else 0 # 这里a=0 # 做buf.pop()操作前先进行if判断
实际对比
做完leetcode(2)题,在解题里看到的这种赋值方式,用基本相同的思路,如果用这种方式,可读性和效率会有质的飞跃
不用:
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ flag = False res = ListNode(0) _res = res while True: if l1 is None and l2 is None: if flag is 0: p.next = None else: _res.val += flag return res elif l1 is None: val, flag = self.__add(l2.val, flag) _res.val += val _res.next = ListNode(0) p = _res _res, l2 = _res.next, l2.next elif l2 is None: val, flag = self.__add(l1.val, flag) _res.val += val _res.next = ListNode(0) p = _res _res, l1 = _res.next, l1.next else: val, flag = self.__add(l1.val, l2.val, flag) _res.val += val _res.next = ListNode(0) p = _res _res, l1, l2 = _res.next, l1.next, l2.next def __add(self, *args): add = sum(args) carry = add//10 return add-10*carry, carry
用带if语句的赋值:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: dummy = p = ListNode(None) s = 0 while l1 or l2 or s: s += (l1.val if l1 else 0) + (l2.val if l2 else 0) p.next = ListNode(s % 10) p = p.next s //= 10 l1 = l1.next if l1 else None l2 = l2.next if l2 else None return dummy.next
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。