Подтвердить что ты не робот

Если индекс списка существует, сделайте X

В моей программе пользователь вводит номер n, а затем вводит n количество строк, которые сохраняются в списке.

Мне нужно закодировать такое, что если существует определенный индекс списка, запустите функцию.

Это усложняется тем фактом, что у меня есть вложенные инструкции if len(my_list).

Вот упрощенная версия того, что у меня есть сейчас, которая не работает:

n = input ("Define number of actors: ")

count = 0

nams = []

while count < n:
    count = count + 1
    print "Define name for actor ", count, ":"
    name = raw_input ()
    nams.append(name)

if nams[2]: #I am trying to say 'if nams[2] exists, do something depending on len(nams)
    if len(nams) > 3:
        do_something
    if len(nams) > 4
        do_something_else

if nams[3]: #etc.
4b9b3361

Ответ 1

Может ли вам более полезно использовать длину списка len(n) для информирования вашего решения, а не для проверки n[i] для каждой возможной длины?

Ответ 2

Мне нужно закодировать такое, что если существует определенный индекс списка, запустите функцию.

Это идеальное использование для блока try:

ar=[1,2,3]

try:
    t=ar[5]
except IndexError:
    print 'sorry, no 5'    

Однако по определению все элементы в списке Python между 0 и len(the_list)-1 существуют (т. len(the_list)-1 Нет необходимости в попытке, кроме случаев, когда вы знаете 0 <= index < len(the_list)).

Вы можете использовать перечисление, если хотите индексы между 0 и последним элементом:

names=['barney','fred','dino']

for i, name in enumerate(names):
    print i, name
    if i in (3,4):
        # do your thing with the index 'i' or value 'name' for each item...

Если вы ищете определенную "указательную" мысль, я думаю, вы задаете неправильный вопрос. Возможно, вам следует использовать контейнер сопоставления (например, dict) по сравнению с контейнером последовательности (например, список). Вы можете переписать свой код следующим образом:

def do_something(name):
    print 'some thing 1 done with',name

def do_something_else(name):
    print 'something 2 done with',name        

def default(name):
    print 'nothing done with',name     

something_to_do={  
    3: do_something,        
    4: do_something_else
    }        

n = input ("Define number of actors: ")
count = 0
names = []

for count in range(n):
    print "Define name for actor {}:".format(count+1),
    name = raw_input ()
    names.append(name)

for name in names:
    try:
        something_to_do[len(name)](name)
    except KeyError:
        default(name)

Выполняется следующим образом:

Define number of actors: 3
Define name for actor 1: bob
Define name for actor 2: tony
Define name for actor 3: alice
some thing 1 done with bob
something 2 done with tony
nothing done with alice

Вы также можете использовать метод .get, а не пытаться/за исключением более короткой версии:

>>> something_to_do.get(3, default)('bob')
some thing 1 done with bob
>>> something_to_do.get(22, default)('alice')
nothing done with alice

Ответ 3

len(nams) должен быть равен n в вашем коде. Все индексы 0 <= i < n "существуют".

Ответ 4

Это можно сделать, просто используя следующий код:

if index < len(my_list):
    print(index, 'exists in the list')
else:
    print(index, "doesn't exist in the list")

Ответ 5

Мне нужно закодировать такое, что если существует определенный индекс списка, запустите функцию.

Вы уже знаете, как протестировать это, и на самом деле уже выполняют такие тесты в вашем коде.

Допустимыми индексами для списка длины n являются 0 через n-1 включительно.

Таким образом, список имеет индекс i , если и только если длина списка не менее i + 1.

Ответ 6

Использование длины списка было бы самым быстрым решением, чтобы проверить, существует ли индекс:

def index_exists(ls, i):
    return (0 <= i < len(ls)) or (-len(ls) <= i < 0)

Это также проверяет наличие отрицательных индексов и большинства типов последовательностей (таких как ranges и str), которые имеют длину.

Если впоследствии вам все равно понадобится получить доступ к элементу по этому индексу, проще попросить прощения, чем разрешения, и он также быстрее и более питоничен. Используйте try: except:

try:
    item = ls[i]
    # Do something with item
except IndexError:
    # Do something without the item

Это будет в отличие от:

if index_exists(ls, i):
    item = ls[i]
    # Do something with item
else:
    # Do something without the item

Ответ 7

Если вы хотите итерировать вставленные данные актеров:

for i in range(n):
    if len(nams[i]) > 3:
        do_something
    if len(nams[i]) > 4:
        do_something_else

Ответ 8

ok, поэтому я думаю, что это действительно возможно (ради аргумента):

>>> your_list = [5,6,7]
>>> 2 in zip(*enumerate(your_list))[0]
True
>>> 3 in zip(*enumerate(your_list))[0]
False

Ответ 9

Вы можете попробовать что-то вроде этого

list = ["a", "b", "C", "d", "e", "f", "r"]

for i in range(0, len(list), 2):
    print list[i]
    if len(list) % 2 == 1 and  i == len(list)-1:
        break
    print list[i+1];

Ответ 10

Много ответов, а не простых.

Чтобы проверить, существует ли индекс 'id' в словаре dict:

if 'id' in Dict

возвращает true, если 'id' существует.

Ответ 11

Не позволяйте пробелу перед вашими скобками.

Пример:

n = input ()
         ^

Подсказка: Вы должны добавлять комментарии и/или под своим кодом. Не за вашим кодом.


Хороший день.