python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python条件赋值判断语句

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文