2012-03-16 63 views
1

我有一個簡單的代碼是這樣的Python:Python命令正在工作,但爲什麼?

a = [1,2,3] 
b = [2,4,6] 

def union(a,b): 
    pos = 0 
    while pos < len(b): 
     n = b[pos] 
     if n in a is not 'True': 
      a = a 
     else: 
      a.append(n) 
     pos = pos +1 
    return a 

print union(a,b) 

正如你所看到的,第一個IF語句是沒有意義的。但是,如果我這樣編碼:

if n in a is 'True': 
    a.append(n) 

它不起作用。第一個代碼段更改a = [1,2,4,6] - 僅添加列表'b'中不在列表'a'中的數字。如果按照建議將「IF」片段更改爲「is」True,則不起作用。

雖然這個函數做了我打算做的事情,但我覺得它並不乾淨,我不知道爲什麼「如果n在a是'真':」不會等同於其他部分「if n中的a不是'真':「功能。

有人能幫我理解嗎?

回答

1

你應該只使用True不是字符串'True'

或更好,但只是

if n not in a: 
    a.append(n) 

如果你是一個初學者,你可能沒有意識到,Python有一個內置的類型,稱爲set

set對象已經有交集/聯合等方法

3

這是不使用布爾檢查,然後將其與一個字符串比較非常Python化的方式,所以這將是更好地做這種方式:

a = [1,2,3] 
b = [2,4,6] 

def union(x,y): 
    for v in y: 
     if v not in x: 
      x.append(v) 
    return x 

print union(a,b) 

OR:

a.extend(set(b).difference(set(a))) 
print a 
>>> [1, 2, 3, 4, 6] 

或情況你不關心創建不是新的對象:

print list(set(a).union(b)) 
0

您可以使用

if n in a 

if n not in a 

代替is 'True'

2

inis/is not均爲關係運算符,和在Python關係運算符被鏈接。因此n in a is not 'True'相當於n in a and a is not 'True',而n in a is 'True'相當於n in a and a is 'True'。顯然,這些不是彼此的否定,因爲他們都有n in a

但是不要使用is,除非你知道你需要它,並且永遠不要與布爾值進行比較(除非是yadda yadda)。

相關問題