2012-11-17 50 views
1

我有一個函數必須返回True當且僅當L1中的所有ints都是L2中相應位置的字符串的長度。和先決條件:len(L1)== len(L2)。功能主體有問題

實施例:

>>> are_lengths_of_strs([4, 0, 2], ['abcd', '', 'ef']) 
True 

下面是功能:

def are_lengths_of_strs(L1, L2): 
    result = True 
    for i in range(len(L1)): 
     if i in len(L1) != len(L2): 
      result = False 
    return result 

它導致錯誤。該行if i in len(L1) != len(L2):是錯誤的。有人可以幫助我在這條線?

觀測值:我必須使用!=

+5

「的東西在丹麥的狀態爛」 – sehe

+0

+1到sehe的評論, __使用___爲您的問題使用描述性標題。 –

回答

1

更正代碼的版本:

def are_lengths_of_strs(L1, L2): 
    result = True 
    for i in range(len(L1)): 
     if L1[i] != len(L2[i]): 
      result = False 
    return result 

請注意,這不是Python的,因爲你不知道,其實在這裏需要一個索引:

def are_lengths_of_strs(L1, L2): 
    result = True 
    for i, l in zip(L1, L2) 
     if i != len(l): 
      result = False 
    return result 

更短:

def are_lengths_of_strs(L1, L2): 
    return all(i == len(l) 
     for i, l in zip(L1, L2)) 
+0

+1用於維持pythonicness –

+0

謝謝。這幫助了我! – peitao

0

使用內置all()隨着zip()

In [5]: all(x==len(y) for x,y in zip([4, 0, 2], ['abcd', '', 'ef'])) 
Out[5]: True 

,或者如果!=被強制使用any()

In [7]: not any(x != len(y) for x,y in zip([4, 0, 2], ['abcd', '', 'ef'])) 
Out[7]: True 

或改善代碼:

def are_lengths_of_strs(L1, L2): 
    for x,y in zip(L1,L2): 
     if x!=len(y): 
      return False 
    return True 


In [12]: are_lengths_of_strs([4, 0, 2], ['abcd', '', 'ef']) 
Out[12]: True 
0

您的if狀況可能是問題所在:

if i in len(L1) != len(L2): 

這檢查是否i in len(L1),但len(L1)是一個整數,它不能「包含」另一個數字。

你必須遍歷每個列表的元素:

def are_lengths_of_strs(L1, L2): 
    result = True 

    for i in range(len(L1)): 
     if L1[i] != len(L2[i]): 
      result = False 

    return result 

而且,擺脫result。一個簡單的return聲明將工作得很好:

def are_lengths_of_strs(L1, L2): 
    for i in range(len(L1)): 
     if L1[i] != len(L2[i]): 
      return False 

    return True 

如果你想獲得更多的Python化,使用zip

def are_lengths_of_strs(L1, L2): 
    for a, b in zip(L1, L2) 
     if a != len(b): 
      return False 

    return True