Лучший способ обработать list.index (может не существовать) в Python? - PullRequest
88 голосов
/ 25 января 2010

У меня есть код, который выглядит примерно так:

thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)

хорошо, так что это упрощено, но вы поняли идею. Теперь thing может и не быть в списке, в этом случае я хочу передать -1 как thing_index. В других языках это то, что вы ожидаете, если index() вернется, если не сможет найти элемент. На самом деле это бросает ValueError.

Я мог бы сделать это:

try:
    thing_index = thing_list.index(thing)
except ValueError:
    thing_index = -1
otherfunction(thing_list, thing_index)

Но это выглядит грязно, к тому же я не знаю, можно ли поднять ValueError по какой-то другой причине. Я предложил следующее решение, основанное на функциях генератора, но оно кажется немного сложным:

thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]

Есть ли более чистый способ достичь того же? Давайте предположим, что список не отсортирован.

Ответы [ 12 ]

0 голосов
/ 08 июля 2013

Я бы предложил:

if thing in thing_list:
  list_index = -1
else:
  list_index = thing_list.index(thing)
0 голосов
/ 25 января 2010

Я не знаю, почему вы должны думать, что это грязно ... из-за исключения? если вы хотите, чтобы он был лайнером, вот он:

thing_index = thing_list.index(elem) if thing_list.count(elem) else -1

но я бы посоветовал не использовать его; Я думаю, что решение Росса Роджерса - лучшее, используйте объект для инкапсуляции вашего поведения, не пытайтесь расширить язык до предела за счет читабельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...