# concatena um novo elemento ao final da lista
# estende a lista com os elementos de uma nova lista
# imprime ['cripto', 2, True, 'novo elem', 1.2, 4]
# sintaxe alternativa para o extend
# obs: utilizar o append com uma lista concatena a lista em si, e não seus elementos
# imprime 3 (o tamanho da lista) pois a lista interna é um único elemento
# deleta o primeiro elemento da lista l1
# imprime [2, True, 'novo elem', 1.2, 4]
# imprime 5 (novo tamanho da lista)
# operador "slice" do Python:
# [i:j] retorna os elementos entre i e j-1
print(l1[0:2]) # imprime [2, True]
print(l1[2:5]) # imprime ['novo elem', 1.2, 4]
# também é possível acessar na ordem inversa (de trás pra frente)
print(l1[-1]) # imprime 4
print(l1[-2]) # imprime 1.2
# sintaxe alternativa para criar listas, utilizando o construtor
# os parênteses duplos são necessários pois essa função recebe apenas um argumento, que neste caso é uma tupla (explicada adiante)
# também aceita outros tipos iteráveis como argumento
# imprime ['a', 'b', 'c']
# l6 = concatenação de l1 e l2
# imprime [2, True, 'novo elem', 1.2, 4, 2.3, 'a']