Обход 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 варианта:

  1. Написать функцию:
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)   # -
  1. Создать свой класс с переопределением:
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 -

→ Ссылка