python入門 20180707 對python中布爾運算的理解


有一個列表去重的題目是這樣的:有一個列表有N個元素,將其去重並保持元素順序不變;

有幾種解答方法:

#列表排重且不改變順序
def unique(items):
    seen = set()
    rs = []
    for i in items:
        if i not in seen:
            rs.append(i)
            seen.add(i)
    return rs

def unique1(items):
    seen =set()
    return [x for x in items if not (x in seen or seen.add(x))] def unique2(items):
    seen = set()
    for i in items:
        if i not in seen:
            yield i
            seen.add(i)

def unique3(items):
    return list(dict.fromkeys(items))  #Python 字典 fromkeys() 函數用於創建一個新字典,以序列items中元素做字典的鍵,value(可選)為字典所有鍵對應的初始值。
                                       #python3.6之后記錄插入鍵值對的順序;

其中unique1方法中使用了列表表達式,如何理解這個列表表達式呢?

關鍵是要理解or的用法:

or是先判斷第一個條件的真假,只有在第一個條件為假的情況下才會對第二個進行判斷。整個return [x for x in items if not (x in seen or seen.add(x))]的作用其實就是把那些沒有在seen集合中的元素放到集合seen中,然后返回這些元素;

詳細解釋一下這個return語句就是:

如果x in seen為假,代表seen中沒有這個元素,那就執行第二個語句seen.add(x)把x放入集合seen中,第二個語句成功返回None,那么false or None的結果還是None,而if not (x in seen or seen.add(x))就是真,那么就會把x提取出來放到列表中;

如果x in seen為真(列表中有這個元素),直接就返回true,or后面的第二個語句就不會執行了,if not (x in seen or seen.add(x))就為假,x就不會被放到列表中;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM