2013-08-01 2 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... 

EDIT: первый подсписок на самом деле заголовок, так что просто индекс подсписке с ошибкой должны быть возвращены.

ответ

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 не подходит к концу, у вас есть проблема с памятью и процессором. –

Смежные вопросы