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,當(dāng)把a變成列表形態(tài)[a]時候,可以排除例外,就是當(dāng)列表怨怒為空時
eg:
summary = item[‘is_html'] and content[:100] or “”
python條件賦值問題
有條件賦值語句
假設(shè)有列表 buf = [[1], [2], [5], None, [], [7], ()]
,求buf內(nèi)的數(shù)的和
這樣有三種解決辦法
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])
顯然第三種用列表推導(dǎo)是最簡潔的,但不適用于循環(huán)體內(nèi)操作過于復(fù)雜的情況。
這時候第二種帶if語句的賦值就更有效,既增加了程序的可讀性又沒有獨立于循環(huán)體外增加復(fù)雜度
帶if語句的賦值
最有代表性的應(yīng)用場景是做對象操作而不確定變量名是否貼在目標(biāo)對象上的時候,比如上例中的 None
、 []
、 ()
都是不能做索引操作的
None
、空列表、空元組、空字符串、0的bool值都是False,類通過支持 __bool__
方法就可以使類支持bool運算;從而支持if、while、and等語句
buf = [] a = buf.pop() if buf else 0 # 這里a=0 # 做buf.pop()操作前先進(jìn)行if判斷
實際對比
做完leetcode(2)題,在解題里看到的這種賦值方式,用基本相同的思路,如果用這種方式,可讀性和效率會有質(zhì)的飛躍
不用:
# 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
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 中如何實現(xiàn)參數(shù)化測試的方法示例
這篇文章主要介紹了Python 中如何實現(xiàn)參數(shù)化測試的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python使用DrissionPage庫進(jìn)行網(wǎng)頁自動化操作和數(shù)據(jù)提取
隨著自動化測試、數(shù)據(jù)抓取和網(wǎng)頁交互應(yīng)用的日益增多,在眾多的自動化庫中,DrissionPage?作為一個新興的庫,以其簡潔易用和強(qiáng)大的功能受到越來越多開發(fā)者的關(guān)注,本文將介紹如何使用?DrissionPage?進(jìn)行網(wǎng)頁自動化操作和數(shù)據(jù)提取,需要的朋友可以參考下2024-11-11一文帶你了解CNN(卷積神經(jīng)網(wǎng)絡(luò))
CNN是神經(jīng)網(wǎng)絡(luò)中的一種,它的權(quán)值共享網(wǎng)絡(luò)結(jié)構(gòu)使之更類似于生物神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度,減少了權(quán)值的數(shù)量。本文主要講解了CNN(卷積神經(jīng)網(wǎng)絡(luò))的基礎(chǔ)內(nèi)容,想了解更多的小伙伴可以看一看這篇文章2021-09-09