有条件赋值语句
-
假设有列表
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 0sum_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 # 作者:meng-zhi-hen-n # 链接:https://leetcode-cn.com/problems/add-two-numbers/solution/zui-zhi-bai-de-xie-fa-by-meng-zhi-hen-n-2/ # 来源:力扣(LeetCode) # 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文探讨了在Python编程中,如何使用有条件赋值语句来提高代码的可读性和效率。通过比较不同赋值方法,尤其是带if语句的赋值在处理列表和算法问题时的应用,阐述了其在避免额外复杂度和增强可读性方面的优势。在解决LeetCode问题时,使用这种赋值方式可以显著提升解题的可读性和效率。
1674

被折叠的 条评论
为什么被折叠?



