Есть ли в списках Python эквивалент dict.get? - PullRequest
9 голосов
/ 16 марта 2009

У меня есть список целых чисел. Я хочу знать, появляется ли в нем число 13 и, если да, то где. Нужно ли искать в списке дважды, как показано в коде ниже?

if 13 in intList:
   i = intList.index(13)

В случае словарей есть функция get, которая будет определять членство и выполнять поиск с помощью того же поиска. Есть ли что-то подобное для списков?

Ответы [ 5 ]

12 голосов
/ 16 марта 2009

Вы ответили сами, методом index(). Это приведет к исключению, если индекс не найден, поэтому просто поймайте это:

def getIndexOrMinusOne(a, x):
  try:
    return a.index(x)
  except ValueError:
    return -1
8 голосов
/ 16 марта 2009

Похоже, вам просто нужно поймать исключение ...

try:
    i = intList.index(13)
except ValueError:
    i = some_default_value
4 голосов
/ 16 марта 2009
2 голосов
/ 16 марта 2009

Вы можете перехватить исключение ValueError или сделать:

i = intList.index(13) if 13 in intList else -1

(Python 2.5 +)

КСТАТИ. если вы собираетесь выполнять большой пакет подобных операций, вы можете рассмотреть возможность создания обратного значения словаря -> index.

intList = [13,1,2,3,13,5,13]
indexDict = defaultdict(list)
for value, index in zip(intList, range(len(intList))):
   indexDict[value].append(index)

indexDict[13]
[0, 4, 6]
0 голосов
/ 16 марта 2009

Просто поместите то, что вы получили, в функцию и используйте ее :)

Вы можете использовать if i in list: return list.index(i) или try/except, в зависимости от ваших предпочтений.

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