2015-08-01 2 views
-2

Я создаю небольшую программу, которая позволяет пользователю вводить строку в индекс по их выбору в списке. Если пользователь указывает ввести свою строку в индекс 2, и уже есть значение, то программа должна удалить текущее значение и заменить его новым. Если указатель, указанный пользователем, не существует, программа должна вставить индекс в список. Тем не менее, я не знаю, как проверить, существует ли индекс, не выкидывая ошибку. Это мой конкретный код:Python Определение, существует ли индекс в списке

if myDict["List"][user_index] is None: 
    myDict["List"].insert(user_index, user_string) 
else: 
    myDict["List"][user_index] = user_string 

Я получаю эту ошибку при проверке, если myDict [ "Список"] [USER_INDEX] существует:

IndexError: list index out of range 
+0

Ваш вопрос о списке, но ваш код предлагает словарь. Измените свои вопросы, чтобы было понятно, какой тип 'myDict'. – DeepSpace

+0

@DeepSpace Я думаю, что вопрос ясен, как есть. 'myDict' - это dict,' myDict ["List"] '- это список. – fferri

ответ

1

использование

if index >= 0 and index < len(list): 
    do_someting 

Но это не оптимизирован.

EDIT: С Dict() становится:

if user_index not in myDict["List"]: 
    myDict["List"].update(user_index, user_string) 
else: 
    myDict["List"][user_index] = user_string 
+0

'0 <= index DeepSpace

+0

Обратите внимание, что отрицательные индексы также работают (подсчитываются с конца), поэтому технически вы должны проверить для '-len (list) <= index

+0

Я не думаю, что вы понимаете, что я пытаюсь сделать. Индекс вообще не существует, но мне нужно проверить, существует ли он каким-то образом. Это та часть, которую я не понимаю. Я мог бы использовать ваше предложение, если бы использовал предопределенный список. –

0

Если вы сделаете ваш myDict["List"]dict(), вам не придется беспокоиться о проверке, если она существует, или нет, просто изменить его:

myDict["List"][user_index] = user_string 

Если индекс не существует, он создаст новую запись в словаре, иначе он обновит существующую запись.

Он будет работать как «разреженный» вектор.

Однако, если в дальнейшем вам необходимо включить dict в list, вы можете использовать этот код:

myDict["List"] = [myDict["List"].get(k) for k in range(1+max(myDict["List"].keys()))] 

Пример:

>>> d={1: 'foo', 4: 'bar'} 
>>> [d.get(k) for k in range(1+max(d.keys()))] 
[None, 'foo', None, None, 'bar'] 
+0

Это все еще дает мне ошибку: IndexError: индекс назначения списка за пределами допустимого диапазона –

+0

Потому что вы не используете 'dict'. A dict никогда не вызывает «IndexError» – fferri

+0

Чтобы уточнить, вам нужно инициализировать «Список» с помощью: 'myDict [" List "] = dict()' – fferri

0

Ваш код, кажется, использует словари, а не списки , Лучший способ выяснить, существует ли данный ключ в словаре, как так ...

if not user_index in myDict["List"]: 

Это предполагает, что вы уже знаете, что myDict содержит запись для ключа «Список».

+0

В этом случае myDict ["List"] относится к списку и Я только что протестировал это, и в том случае, если индекс уже существует, код не перезаписывает то, что уже существует. –

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