Обход IndexError: list index out of range
Пример:
r = [p, 2, g, "5"]
print(r[0], r[6])
На выводе, понятное дело, ошибка.
Есть ли возможность, чтобы вместо элемента с несуществующим индексом печать какой-либо символ, например прочерк (-)
То есть вывод должен быть:
p, -
Нужно для циклов, с разными длинами списков.
Спасибо.
UPD
a1 = ["a", "b", "c"]
a2 = ["c", "a", "b"]
a3 = ["a", "b"]
a4 = ["c", "a", "f"]
r = [a1,a2,a3,a4]
for i in range(0, len(r)):
u1=r[i][0]
u2=r[i][1]
u3=r[i][2]
print(u1, u2, u3)
тут будет ошибка, а надо чтоб, стоял прочерк, вот так:
a b c c a b a b - c a f –
Ответы (2 шт):
Автор решения: Alex Titov
→ Ссылка
Ну можно что-то такое изобразить.
import itertools
def get_dflt(seq, pos, dflt='-'):
return itertools.islice(itertools.chain(seq, itertools.repeat(dflt)), pos, None).__next__()
print(get_dflt('ABC', 1), get_dflt('ABC', 6))
Автор решения: Алексей Белкин
→ Ссылка
Я могу предложить 2 варианта:
- Написать функцию:
def print_ind(lst, index):
try:
print(lst[index])
except:
print('-')
r = ['p', 2, 'g', '5']
print_ind(r, 0) # p
print_ind(r, 6) # -
- Создать свой класс с переопределением:
class MyCl(list):
def __init__(self, lst):
self.lst = lst
def __getitem__(self, item):
try:
return self.lst[item]
except:
return '-'
r = MyCl(['p', 2, 'g', "5"])
print(r[0], r[6]) # p -