5 - vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ice-b-05.pdf · 4...

28
ICE-B 5 - Vectores Ludwig Krippahl

Upload: hacong

Post on 21-Sep-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

ICE-B

5 - Vectores

Ludwig Krippahl

Page 2: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

1

Vectores

Resumo■ Vectores: conjuntos ordenados• Listas, tuplos e strings

■ Acesso a elementos de vectores• Indexação e slicing

■ Métodos de listas e strings■ Exemplo: enzimas de restrição

Page 3: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

2

Vectores

Listas, tuplos e strings

Page 4: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

3

Listas e Tuplos

Lista (list)■ Um objecto mutável que guarda um conjunto ordenado de objectos• Mutável (mutable): podemos acrescentar, retirar ou mudar objectos que contém

• Usado sempre que precisamos de alterar os elementos

• Normalmente para conjunto de elementos de igual significado

years = [1999,2000,2001]

Tuplo (tuple)■ Objecto imutável que guarda um conjunto ordenado de objectos• Imutável (immutable): não podemos mudar que objectos tem

• Normalmente usado com elementos cujo significado depende da posição

coordinates = (23.4, 12.6, 13.5)

Page 5: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

4

Indexação e Slicing

Indexação de vectores (listas, tuplos e strings)■ Por ordem ascendente do zero ou descendente do -1• O índice sempre em parênteses rectos

In : years = [1999,2000,2001] In : coordinates = (2, 12.6, 1) In : text = 'once upon a time' In : text[0] Out: 'o' In : text[1] Out: 'n' In : years[2] Out: 2001 In : coordinates[1] Out: 12.6 In : text[-2] Out: 'm'

String: 'Python'

+---+---+---+---+---+---+

| P | y | t | h | o | n |

+---+---+---+---+---+---+

0 1 2 3 4 5

-6 -5 -4 -3 -2 -1

Page 6: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

5

Indexação e Slicing

Slicing de vectores (listas, tuplos e strings)■ Índices semelhantes mas calhan entre elementos• A "fatia" é definida poir inicio:fim:passo

In : numbers=[0, 1, 2, 3, 4, 5, 6] In : numbers[1:3] Out: [1, 2] In : numbers[2:] Out: [2, 3, 4, 5, 6] In : numbers[::3] Out: [0, 3, 6] In : numbers[-2:] Out: [5, 6]

String: 'Python'

+---+---+---+---+---+---+

| P | y | t | h | o | n |

+---+---+---+---+---+---+

0 1 2 3 4 5 6

-6 -5 -4 -3 -2 -1

Page 7: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

6

Atribuição com vectores

Slicing de listas permite atribuição■ Basta que o número de elementos seja o mesmo

In : numbers[1:3] = [-2,-4] In : numbers Out: [0, -2, -4, 3, 4, 5, 6] In : numbers[1:3] = 'ab' In : numbers Out: [0, 'a', 'b', 3, 4, 5, 6]

■ Também podemos "desempacotar" (unpack) valores

In : numbers=[0, 1, 2, 3, 4, 5, 6] In : a, b = numbers[3:5] In : a Out: 3 In : b Out: 4

In : a, b, c = (1,'xxx',[1,3,4]) In : a Out: 1 In : b Out: 'xxx' In : c Out: [1, 3, 4]

Page 8: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

7

Atribuição com vectores

"Desempacotar" argumentos de funções■ Podemos fazer o mesmo com argumentos de funções• Usando o operador * para distribuir os elementos de um vector pelos argumentos,

desde que no mesmo número

def add(a,b): result = a+b return result

In : add( (6,9) ) add( (6,9) ) TypeError: add() missing 1 required positional argument: 'b' In : add( *(6,9) ) Out: 15

Page 9: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

8

Listas

■ Métodos e funções úteis para listas

In : numbers.append(20) In : numbers Out: [0, 1, 2, 3, 4, 5, 6, 20] In : numbers.extend([1,2,3]) In : numbers Out: [0, 1, 2, 3, 4, 5, 6, 20, 1, 2, 3] In : numbers.index(20) Out: 7 In : numbers.remove(4) In : numbers.remove(5) In : numbers Out: [0, 1, 2, 3, 6, 20, 1, 2, 3] In : numbers.reverse() In : numbers Out: [3, 2, 1, 20, 6, 3, 2, 1, 0] In : del(numbers[3:6]) In : numbers Out: [3, 2, 1, 2, 1, 0]

Page 10: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

9

Strings

(Alguns) métodos úteis implementados em stringsIn : name = 'Python' In : name[2:5] Out: 'tho' In : name.index('h') Out: 3 In : name[3]='x' TypeError: 'str' object does not support item assignment In : name.upper() Out: 'PYTHON' In : name.split('t') Out: ['Py', 'hon']

Page 11: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

10

Vectores

Objectos mutáveis e funções

Page 12: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

11

Objectos mutáveis

Atribuição em Python não copia objectos

Endereço Valor

100 1001001010101010

101 (lista: [1 2 3])

102 1001001010100101

Nome Endereço

a 101

In : a = [1,2,3]

■ Cria a lista em memória e "aponta" a variável para esse endereço

Page 13: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

12

Objectos mutáveis

Atribuição em Python não copia objectos

Endereço Valor

100 1001001010101010

101 (lista: [1 2 3])

102 1001001010100101

Nome Endereço

a 101

b 101

In : a = [1,2,3] In : b = a

■ Cria uma nova variável mas "apontada" para o mesmo objecto• Só copia a referência; o objecto é o mesmo

Page 14: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

13

Objectos mutáveis

Atribuição em Python não copia objectos

Endereço Valor

100 1001001010101010

101 (lista: [1 2 3 4])

102 1001001010100101

Nome Endereço

a 101

b 101

In : a = [1,2,3] In : b = a In : b.append(4) In : b Out: [1, 2, 3, 4] In : a Out: [1, 2, 3, 4]

■ Alterar o objecto referido por uma variável altera o objecto referidopela outra (porque são o mesmo objecto)

Page 15: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

14

Objectos mutáveis

Argumentos também não copiam o objecto■ O parâmetro é um nome independente para o mesmo objecto• Isto significa que podemos alterar o objecto (se for mutável)• Mas alterar a referência do nome local não tem efeito fora da função

def add_to_list(a_list, a_number): a_list.append(a_number) a_list = []

In : elements = [1,2,3] In : add_to_list(elements, 22) In : elements Out: [1, 2, 3, 22]

Page 16: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

15

Objectos mutáveis

Argumentos também não copiam o objecto■ O parâmetro é um nome independente para o mesmo objecto

■ Fora da função

Variável Endereço

elements 102

Endereço Valor

101 0000000000000

102 (lista: [1 2 3])

103 0000000000000

■ Dentro da função

Variável Endereço

a_list 102

In : elements = [1,2,3] In : add_to_list(elements, 22)

def add_to_list(a_list, a_number):

Page 17: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

16

Objectos mutáveis

Argumentos também não copiam o objecto■ O parâmetro é um nome independente para o mesmo objecto

■ Fora da função

Variável Endereço

elements 102

Endereço Valor

101 0000000000000

102 (lista: [1 2 3 22])

103 0000000000000

■ Dentro da função

Variável Endereço

a_list 102

In : elements = [1,2,3] In : add_to_list(elements, 22)

def add_to_list(a_list, a_number): a_list.append(a_number)

Page 18: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

17

Objectos mutáveis

Argumentos também não copiam o objecto■ O parâmetro é um nome independente para o mesmo objecto

■ Fora da função

Variável Endereço

elements 102

Endereço Valor

101 0000000000000

102 (lista: [1 2 3 22])

103 (lista: [])

■ Dentro da função

Variável Endereço

a_list 103

In : elements = [1,2,3] In : add_to_list(elements, 22)

def add_to_list(a_list, a_number): a_list.append(a_number) a_list = []

Page 19: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

18

Objectos mutáveis

Com objectos imutáveis tanto faz■ Strings e números, por exemplo■ Se o objecto não pode mudar, é indiferente ser o mesmoCom objectos mutáveis é preciso algum cuidado■ Quando copiamos variáveis• (copia apenas a referência)

■ Quando os damos como argumentos• (o parâmetro refere o mesmo objecto)

Page 20: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

19

Vectores

Exemplo: enzimas de restrição

Page 21: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

20

Enzimas de restrição

Objectivo: simular cortes com enzimas de restrição■ Bsp1407I é uma enzima de restrição (de tipo II)• Reconhece TGTACA e corta entre primeiro T e G

■ Começamos com sequência numa variável e vamos experimentar• Primeiro objectivo: perceber problema e algoritmo• Nota: \ permite continuar a linha

sequence = 'GATCCTCCATATACAACGGTATCTGTACATCCACCTCAGGTTT'+\ 'AGATCTCAACAATGTACACGGAACCATTGCCGACATG' recon= 'TGTACA' fragments = sequence.split(recon) print(fragments)

['GATCCTCCATATACAACGGTATC', 'TCCACCTCAGGTTTAGATCTCAACAA', 'CGGAACCATTGCCGACATG']

Page 22: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

21

Enzimas de restrição

Simular cortes com enzimas de restriçãosequence = 'GATCCTCCATATACAACGGTATCTGTACATCCACCTCAGGTTT'+\ 'AGATCTCAACAATGTACACGGAACCATTGCCGACATG' recon= 'TGTACA' fragments = sequence.split(recon) print(fragments)

['GATCCTCCATATACAACGGTATC', 'TCCACCTCAGGTTTAGATCTCAACAA', 'CGGAACCATTGCCGACATG']

■ Problema: estamos a perder toda a zona de reconhecimento• O método split elimina o separador

Page 23: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

22

Enzimas de restrição

Simular cortes com enzimas de restrição■ Problema: estamos a perder toda a zona de reconhecimento■ Solução: vamos marcar o ponto de corte primeiro

sequence = 'GATCCTCCATATACAACGGTATCTGTACATCCACCTCAGGTTT'+\ 'AGATCTCAACAATGTACACGGAACCATTGCCGACATG' recon = 'TGTACA' cut = 'T-GTACA' marked = sequence.replace(recon,cut) fragments = marked.split('-') print(fragments)

['GATCCTCCATATACAACGGTATCT', 'GTACATCCACCTCAGGTTTAGATCTCAACAAT','GTACACGGAACCATTGCCGACATG']

['GATCCTCCATATACAACGGTATC',

'TCCACCTCAGGTTTAGATCTCAACAA',

'CGGAACCATTGCCGACATG']

Page 24: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

23

Enzimas de restrição

Simular cortes com enzimas de restrição■ Percebido o problema e o algoritmo, implementamos e testamos

# -*- coding: utf-8 -*- """ Simulates DNA digestion by enzymes """ def digest_sequence(sequence,recon,cut): """Return a list of fragments from cutting the sequence""" marked = sequence.replace(recon,cut) frags = marked.split('-') return frags recon = 'TGTACA' cut = 'T-GTACA' sequence = 'GATCCTCCATATACAACGGTATCTGTACATCCACCTCAGGTTT'+\ 'AGATCTCAACAATGTACACGGAACCATTGCCGACATG' fragments = digest_sequence(sequence, recon, cut)

Page 25: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

24

Enzimas de restrição

Simular cortes com enzimas de restrição■ Percebido o problema e o algoritmo, implementamos e testamos

... fragments = digest_sequence(sequence, recon, cut)

■ Depois de executar, temos o resultado na variável fragments■ Podemos agora ver o comprimento de cada fragmento com len

In : len(fragments[0]) Out: 24 In : len(fragments[1]) Out: 32 In : len(fragments[2]) Out: 24

In : fragments[0] Out: 'GATCCTCCATATACAACGGTATCT' In : fragments[1] Out: 'GTACATCCACCTCAGGTTTAG...' In : fragments[2] Out: 'GTACACGGAACCATTGCCGACATG'

■ Não é muito prático fazer isto assim...

Page 26: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

25

Vectores

Resumo

Page 27: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente

26

Vectores

Resumo■ Vectores: listas, tuplos e strings■ Indexação e slicing■ "Desempacotar" (unpacking) vectores■ Argumentos: referência ao mesmo objecto■ Exemplo: enzimas de restriçãoLeitura adicional:■ Recomendada: Capítulo 5 dos apontamentos■ Opcional: Livro, Cap. 7, 8 até pag. 250 (Dictionaries) e 9 até pag.

282 (files).

Page 28: 5 - Vectores - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ICE-B-05.pdf · 4 Indexação e Slicing Indexação de vectores (listas, tuplos e strings) Por ordem ascendente