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)用場景是做對(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的time模塊和datetime模塊實(shí)例解析
這篇文章主要介紹了python的time模塊和datetime模塊實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
python買賣股票的最佳時(shí)機(jī)(基于貪心/蠻力算法)
這篇文章主要介紹了python買賣股票的最佳時(shí)機(jī)(基于貪心/蠻力算法),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
基于Python實(shí)現(xiàn)一個(gè)條形碼檢測算法
條形碼識(shí)別是計(jì)算機(jī)視覺中的常見任務(wù),下面我將介紹如何使用Python和深度學(xué)習(xí)框架實(shí)現(xiàn)一個(gè)高效的條形碼識(shí)別解決方案,有需要的小伙伴可以了解下2025-12-12
用Python簡單實(shí)現(xiàn)個(gè)貪吃蛇小游戲(保姆級(jí)教程)
本文基于Windows環(huán)境開發(fā),適合Python新手,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
Python中實(shí)現(xiàn)對(duì)list做減法操作介紹
這篇文章主要介紹了Python中實(shí)現(xiàn)對(duì)list做減法操作介紹,需要的朋友可以參考下2015-01-01
Python實(shí)現(xiàn)自動(dòng)玩貪吃蛇程序
這篇文章主要介紹了通過Python實(shí)現(xiàn)的簡易的自動(dòng)玩貪吃蛇游戲的小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)一學(xué)2022-01-01

