python中的條件賦值判斷語句語法
python條件賦值判斷語句語法
if - elif - else 語句
如果是普通的三元,if else正常的語句看起來會(huì)有些冗余,所以下面有三種寫法:
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為假的時(shí)候,會(huì)輸出b,當(dāng)把a(bǔ)變成列表形態(tài)[a]時(shí)候,可以排除例外,就是當(dāng)列表怨怒為空時(shí)
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 0sum_buf = sum([i[0] for i in buf if i])
顯然第三種用列表推導(dǎo)是最簡潔的,但不適用于循環(huán)體內(nèi)操作過于復(fù)雜的情況。
這時(shí)候第二種帶if語句的賦值就更有效,既增加了程序的可讀性又沒有獨(dú)立于循環(huán)體外增加復(fù)雜度
帶if語句的賦值
最有代表性的應(yīng)用場(chǎng)景是做對(duì)象操作而不確定變量名是否貼在目標(biāo)對(duì)象上的時(shí)候,比如上例中的 None 、 [] 、 () 都是不能做索引操作的
None 、空列表、空元組、空字符串、0的bool值都是False,類通過支持 __bool__ 方法就可以使類支持bool運(yùn)算;從而支持if、while、and等語句
buf = [] a = buf.pop() if buf else 0 # 這里a=0 # 做buf.pop()操作前先進(jìn)行if判斷
實(shí)際對(duì)比
做完leetcode(2)題,在解題里看到的這種賦值方式,用基本相同的思路,如果用這種方式,可讀性和效率會(huì)有質(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)密鑰密碼(加解密)實(shí)例詳解
這篇文章主要介紹了Python實(shí)現(xiàn)密鑰密碼(加解密),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
pandas 實(shí)現(xiàn)將兩列中的較大值組成新的一列
這篇文章主要介紹了pandas 實(shí)現(xiàn)將兩列中的較大值組成新的一列,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例
這篇文章主要介紹了Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
python使用DrissionPage庫進(jìn)行網(wǎng)頁自動(dòng)化操作和數(shù)據(jù)提取
隨著自動(dòng)化測(cè)試、數(shù)據(jù)抓取和網(wǎng)頁交互應(yīng)用的日益增多,在眾多的自動(dòng)化庫中,DrissionPage?作為一個(gè)新興的庫,以其簡潔易用和強(qiáng)大的功能受到越來越多開發(fā)者的關(guān)注,本文將介紹如何使用?DrissionPage?進(jìn)行網(wǎng)頁自動(dò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

