2015-10-09 12 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) 
相关问题