• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pythonshell

Listas de Listas em Python

4 mensagens neste tópico

Boas,

sou um novo utilizador, não só desse site mas também da linguagem Python, daí que esteja com umas certas dúvidas.

Visto ter algumas bases noutras linguagens de programação estou com duvidas de como aceder a listas e altera-las assim como a sua sintaxe. Passo a citar:

Tenho 1 lista a = ['spam', 'eggs', 100, 1234] se fizer a[-2] obtenho 100, quando faço a[1:-1] obtenho ['eggs', 100], não deveria obter a mesma coisa ou seja ['eggs', eggs]? E porque quando faço a[:2] + ['bacon', 2*2] obtenho ['spam', 'eggs', 'bacon', 4]?

Já agora como faço para obter ajuda na sintaxe do código ex: [:] o que quer dizer ou saber mais sobre palavras chaves do python (copy, type, sort, index etc etc, não acho tutoriais sobre isso).

Obrigada pela atenção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hello ;)

Quanto à tua dúvida de tutoriais, o site que o pmg te deu é de facto muito informativo :)

Relativamente às listas:

lista = ['spam', 'eggs', bacon']

Em Python as listas começam no índice 0 e índices negativos significa ler de trás para a frente. Ou seja, se fizeres lista[-1] vai-te dar o último elemento da lista.

Quanto às outras operações que estás a tentar fazer, chamam-se slicing. Há um bom tutorial disso na wiki: http://wiki.portugal-a-programar.pt/dev_geral:python:slicing

Basicamente, quanto fazes lista[0:2] estás a cortar a lista até ao objecto de índice 2, daí, que ele não apareça. Se fizeres lista[0:-1], é a mesma coisa: ficas com a lista cortada até ao objecto de índice -1, o último, daí que ele não apareça. No teu exemplo tens:

a = ['spam', 'eggs', 100, 1234]

O índice -1 é o elemento 1234. Assim, de 1 a -1, ficas com o elemento de índice 1, eggs, até ao de índice -1, exclusive, ou seja: ['eggs', 100].

A sintaxe [x:y] é basicamente o mesmo que dizeres "de x a y". Se omitires um deles, por exemplo, [:y] fica "até y", ou seja, do início, até y. O mesmo se passa com o "x:",  partir de x.

Quando fazes a[:2] + ['bacon', 2*2] estás a juntar à lista 'a', o segmento ['bacon', 2*2']. Mas, como estás a dizer a[:2], estás a usar apenas a parte da lista 'a' a até ao elemento de índice 2. Ficas portanto com uma nova lista com os dois primeiros elementos de 'a', ['spam', 'eggs'], e com os elementos que acrescentaste à mão, 'bacon' e o resultado da operação 2*2, 4.

Espero que tenhas entendido :x

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lê este tutorial de slicing: http://wiki.portugal-a-programar.pt/dev_geral:python:slicing

Em especial, lê a resalva do rolando2424. Quando tu dizes a[3:4], tu vais buscar tudo o que esteja entre o inicio da posição 3 e o início da posição 4, ou seja, apenas o que está na posição 3. Tanto que se tiveres a = [1, 2, 3, 4, 5] e fizeres a[:2] ou a[0:2] ou a[0:2:1], ele vai-te retornar [1, 2] ([a[0], a[1]]).

Uma função que replica o funcionamento do slicing, pode ser que te ajude a perceber:

def slicing(what, frm = 0, to = None, step = 1):
    if what in [type(1), type(1.0)]: #isto serve só para despistar os objectos não iteráveis
        raise TypeError, "'int' or 'float' object is unsubscriptable" #fiz batota aqui 
    if to == None: to = len(what) #default do to
    returns = [] #o que vai ser retornado
    for x in range(frm, to, step): #se não estás familiarizado com o range(x, y, z), ele retorna uma lista de x até y-1, sendo que em cada iteração é somado z ao x (o default do x é 0, o default do z é 1).
        returns.append(what[x]) 
    if type(what) == type("string"): #este if e o primeiro elif são só para o caso de serem passadas strings ou tuplas, o que não te interessa agora
        return ''.join(returns)
    elif type(what) == type((1, 2, 3)):
        return tuple(returns)
    else:
        return returns

Exemplos:

>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> a[3:7:2]
[4, 6]
>>> slicing(a, 3, 7, 2)
[4, 6]
>>> a[::]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> slicing(a)
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[:2]
[1, 2]
>>> slicing(a, to = 2)
[1, 2]
>>> slicing(a, 0, 2)
[1, 2]
>>> 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora