2015-10-09 10 views
1

這就是它對我來說的樣子:我不明白爲什麼它不會打印爲假我正在嘗試以下代碼...如果列表中的至少一個成員不匹配..... print False

a = [1,2,3,4,5] 
b= [11,6,7,8,9] 

def overlapping(a,b): 
    bool= True 
    for x in range(len(a)): 
    for y in range(len(b)): 
      if b[y]==a[x]: 
      check("True") 
      break 

def check(str): 
     if str =="True": 
      print "True" 
     else: 
      print "False" 

overlapping(a,b) 
+3

因爲你只叫'check'?爲什麼你傳遞一個* string * ?! – jonrsharpe

+0

在Python中查看[Truth Value Testing](https://docs.python.org/2/library/stdtypes.html#truth-value-testing)。當你開始時,這可能是一個常見的陷阱。 –

回答

0

沒有需要循環兩次:不要這樣,使用set

a = [1,2,3,4,5] 
b = [11,6,7,8,9] 
if set(a) & set(b): 
    print "true" 
else: 
    print "False" 

讓它更Python:

a = [1,2,3,4,5] 
b = [11,6,7,8,9] 
def overlapping(a, b): 
    return bool(set(a) & set(b)) 
overlapping(a, b) 
+0

'len(set(a)&set(b))> 0'不僅僅是一個集合(a)&set(b)' –

+0

@brunodesthuilliers你能解釋一下嗎? – Hackaholic

+0

所有Python對象在布爾上下文中都有一個真值。對於內置序列或容器類型(字典,集合,列表,元組,字符串等),空對象具有False值。所以pythonic成語是'如果容器:',而不是'如果len(容器)> 0'。如果你真的想要返回一個嚴格的布爾值,它應該是'return bool(set(a)&set(b))' –

0

使用method any和發電機表達

代碼:

list1 = [1,2,3,4,5] 
list2= [11,6,7,8,9] 

def overlapping(list1,list2): 

    return any(value in list2 for value in list1) 

print overlapping(list1,list2) 

您變更代碼:

a = [1,2,3,4,5] 
b= [11,6,7,8,9] 

def overlapping(a,b): 
    for x in a: 
     if x in b: 
      check("True") 
      break 
    else: 
     check("False") 


def check(strs): 
    print strs 

overlapping(a,b) 

注:

無需調用功能檢查罪CE它打印相同的值,你可以只打印

+1

'any'返回true或false,如果條件滿足,只要返回任何(列表1中的值爲list2中的值)'應該工作 – Hackaholic

+1

列表理解在這裏沒用,你得到的結果與沒有生成表達式的開銷沒有任何相同的結果'any(value in在list1中的值是list2)' –

+0

你們都是正確的改變 – The6thSense

0
In [3]: a = [1,2,3,4,5] 
    ...: b= [11,6,7,8,9] 
    ...: 
    ...: def overlapping(a,b): 
    ...:  my_break = False 
    ...:  for x in range(len(a)): 
    ...:   if my_break: break 
    ...:   for y in range(len(b)): 
    ...:    if my_break: break 
    ...:    if b[y]==a[x]: 
    ...:     check("True") 
    ...:    else: 
    ...:     check("False") 
    ...:     my_break = True 
    ...: 
    ...: def check(string): 
    ...:  if string == "True": 
    ...:  print "True" 
    ...:  else: 
    ...:  print "False" 
    ...: 
    ...: overlapping(a,b) 
    ...: 
False 

In [4]: def overlapping(a, b): 
    ...:  return any(x in b for x in a) 
    ...: 

In [5]: overlapping(a, b) 
Out[5]: False 

也不要使用str字,其內置的類型。

0

嘗試在TRUE;此情況下使用的,而不是returnbreak

a = [1,2,3,4,5] 
b= [33,6,7,8,9] 

def overlapping(a,b): 
    bool= True 
    for x in range(len(a)): 
     for y in range(len(b)): 
      if b[y]==a[x]: 
       return(check("True")) 

    return(check("False")) 

def check(str): 
     if str =="True": 
      print "True" 
     else: 
      print "False" 

overlapping(a,b) 
相關問題