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變成列表形態(tài)[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 0sum_buf = sum([i[0] for i in buf if i])
顯然第三種用列表推導是最簡潔的,但不適用于循環(huán)體內操作過于復雜的情況。
這時候第二種帶if語句的賦值就更有效,既增加了程序的可讀性又沒有獨立于循環(huán)體外增加復雜度
帶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總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python使用DrissionPage庫進行網頁自動化操作和數據提取
隨著自動化測試、數據抓取和網頁交互應用的日益增多,在眾多的自動化庫中,DrissionPage?作為一個新興的庫,以其簡潔易用和強大的功能受到越來越多開發(fā)者的關注,本文將介紹如何使用?DrissionPage?進行網頁自動化操作和數據提取,需要的朋友可以參考下2024-11-11

