2013-08-01 16 views
0

我有一個列表的列表,我要查找其長度的子表的索引不是4.這是列表的樣子:找到有錯誤的子列表的索引?

l = [['"a"','"b"','"c"','"d"'],['"a"','"b"','"c"','"d"'],['"a"','"b"','"c"','"d"','"e"'] 

第三子表不具有4的長度,所以我將不得不向用戶報告第三行沒有正確的長度。

這是我的代碼:

x = max(len(l) for i in l) 
     if x == 4: 
      return True 
     elif x != 4: 
      for i in l: 
       c = l.index(i) 
      print(c)  #returns 4... 

編輯:第一子列表實際上是一個頭,所以只是有錯誤的子表的索引應返回。

回答

0

使用next()enumerate()

index = next(i for i, sublist in enumerate(l) if len(l) != 4) 

這將提高StopIteration如果所有子列表的長度都是4或沒有子列表。你可以問next()返回默認值,而不是:

index = next((i for i, sublist in enumerate(l) if len(l) != 4), None) 
0

如何

>>> [len(v) == 4 for v in l].index(False) 
2 
+0

這兩次循環;一次生成列表,第二次掃描索引的結果列表。 –

+0

@MartijnPieters我懷疑這將是性能問題的根源。我發現它是最直觀,易於理解且易於編寫的方法。 – arshajii

+0

我只是明確了使用這種方法的缺點。如果'l'很大,並且長度不是4的第一個列表即將結束,那麼您在這裏同時存在內存和CPU問題。 –