Ответ 1
Может ли вам более полезно использовать длину списка len(n)
для информирования вашего решения, а не для проверки n[i]
для каждой возможной длины?
В моей программе пользователь вводит номер 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.
Может ли вам более полезно использовать длину списка len(n)
для информирования вашего решения, а не для проверки n[i]
для каждой возможной длины?
Мне нужно закодировать такое, что если существует определенный индекс списка, запустите функцию.
Это идеальное использование для блока 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
len(nams)
должен быть равен n
в вашем коде. Все индексы 0 <= i < n
"существуют".
Это можно сделать, просто используя следующий код:
if index < len(my_list):
print(index, 'exists in the list')
else:
print(index, "doesn't exist in the list")
Мне нужно закодировать такое, что если существует определенный индекс списка, запустите функцию.
Вы уже знаете, как протестировать это, и на самом деле уже выполняют такие тесты в вашем коде.
Допустимыми индексами для списка длины n
являются 0
через n-1
включительно.
Таким образом, список имеет индекс i
, если и только если длина списка не менее i + 1
.
Использование длины списка было бы самым быстрым решением, чтобы проверить, существует ли индекс:
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
Если вы хотите итерировать вставленные данные актеров:
for i in range(n):
if len(nams[i]) > 3:
do_something
if len(nams[i]) > 4:
do_something_else
ok, поэтому я думаю, что это действительно возможно (ради аргумента):
>>> your_list = [5,6,7]
>>> 2 in zip(*enumerate(your_list))[0]
True
>>> 3 in zip(*enumerate(your_list))[0]
False
Вы можете попробовать что-то вроде этого
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];
Много ответов, а не простых.
Чтобы проверить, существует ли индекс 'id' в словаре dict:
if 'id' in Dict
возвращает true, если 'id' существует.
Не позволяйте пробелу перед вашими скобками.
Пример:
n = input ()
^
Подсказка: Вы должны добавлять комментарии и/или под своим кодом. Не за вашим кодом.
Хороший день.