========== Iterations ========== The :py:class:`range` function ============================== - :code:`range(n)` returns an object of type :py:class:`range` which represents a sequence of consecutive integers from 0 to :code:`n-1`. .. code-block:: pycon >>> r = range(5) >>> list(r) [0, 1, 2, 3, 4] - :code:`range(m, n)` returns an object of type :py:class:`range` which represents a sequence of consecutive integers from :code:`m` to :code:`n-1`. .. code-block:: pycon >>> r = range(3, 10) >>> list(r) [3, 4, 5, 6, 7, 8, 9] - :code:`range(m, n, p)` returns an object of type :py:class:`range` which represents a sequence of consecutive integers from :code:`m` to :code:`n-1` jumping with a :code:`p` step. .. code-block:: pycon >>> r = range(4, 10, 2) >>> list(r) [4, 6, 8] - If ``p`` is negative the sequence order is reversed (right-to-left). .. code-block:: pycon >>> r = range(8, 3, -1) >>> list(r) [8, 7, 6, 5, 4] The :py:class:`enumerate` function ================================== .. code-block:: pycon >>> e = enumerate('abc') >>> list(e) [(0, 'a'), (1, 'b'), (2, 'c')] Indexed sequences ================= Strings, lists and tuples are instances of Indexed sequences Sequence length --------------- - La funció ``len`` retorna el nombre d'elements de la llista. - Els darrer element d'una llista ocupa l'índex longitud menys u. Access ------ - L'**operador claudàtor** [] selecciona un únic element de la sequence. - Els índex són enters i comencen per 0. - L'accés a un element inexistent provoca in error d'execució. - Els **índexs negatius** comencen a comptar des del final de la sequence. Slices ------ - L'operador llesca ``llista[n:m]`` obté la subllista que comença en l'element d'índex ``n`` inclòs i acaba en el d'índex ``m`` exclòs. - ``n`` es pot ometre: comença en el primer element. - ``m`` es pot ometre: va fins al darrer element. - Si s'ometen tots dos: tota la llista. Sequence Traversal ================== La sentència `for` ------------------ - L'iterador ``for`` permet recórrer llistes: .. code-block:: python3 for element in llista: sentències - La llista de la capçalera d'un ``for`` pot ser una expressió qualsevol que s'avaluï a una llista. Propòsit d'un recorregut ------------------------ - Sintetitzar: Calcular un resultat que sintetitza els valors dels elements de la llista. Per exemple, sumar el elements, calcular el màxim o el mínim, comptar els elements, :py:meth:`str.join`... - `Strings i llistes\: conversió, split, join`_: 4, 6, 7. L'esquema general és .. code-block:: python3 def sintetiza(llista): s = element_neutre_acumula for elem in llista: s = acumula(s, elem) return s on només cal decidir #. quina és la operació :code:`acumula`, i #. quin és l'element neutre d'aquesta operació (:code:`element_neutre_acumula`) - Aplicar: Generar una llista resultat on cada element es calcula aplicant (cridant) una funció sobre l'element corresponent de la llista dada. Per exemple, el producte d'un nombre pels elements de la llista... - `Llistes com a paràmetres de funcions`_: 3. L'esquema general és .. code-block:: python3 def aplica(llista): r = [] for elem in llista: elem_r = funció(elem) r.append(elem_r) return r on només cal decidir #. quina és la funció que cal aplicar a cada element (:code:`funció`). - Filtrar: Generar una llista resultat a partir dels elements de la llista dada que compleixin una condició. Per exemple, calcular la llista dels nombres positius... L'esquema general és .. code-block:: python3 def filtra(llista): r = [] for elem in llista: if condició(elem): r.append(elem) return r on només cal decidir #. quina és la condició que han de complir els elements triats (:code:`condició`). - Combinacions dels anteriors Qualsevol combinació de sintetitzar, aplicar i sintetitzar. - Filtrar i sintetitzar: `Strings i llistes\: conversió, split, join`_, 7. Cercar en una llista -------------------- Decidir si algun dels elements d'una llista compleix una condició. - `Cercant en llistes`_: 1. L'esquema general és .. code-block:: python3 def cerca(llista): trobat = False for elem in llista: trobat = condició(elem) if trobat: break return trobat on només cal decidir #. quina és la condició que ha de complir l'element que busquem (:code:`condició`). .. _Strings i llistes\: conversió, split, join: http://gie.cs.upc.edu/fi/temes/llistes/Strings_i_llistes:_conversi%C3%B3,_split,_join/ .. _Llistes com a paràmetres de funcions: http://gie.cs.upc.edu/fi/temes/llistes/Llistes_com_a_par%C3%A0metres_de_funcions/ .. _Cercant en llistes: http://gie.cs.upc.edu/fi/temes/llistes/Cercant_en_llistes/ Sequence Index Traversal ======================== - Usant ``for`` i ``range``. .. code-block:: python3 for índex in range(len(llista)): sentències - Usant ``for`` i ``enumerate``. .. code-block:: python3 for índex, element in enumerate(llista): sentències Quan cal recórrer els índexs? ----------------------------- - Quan el resultat és un índex (o posició). - Índex del màxim, índex del primer nombre negatiu... - Pessetes_: 5. - Quan cal modificar algun element de la llista i no es pot modificar via mètodes modificadors. - `Intercanviar màxim per mínim`_. - Quan cal recórrer dues llistes en paral·lel. - Vectors_: 4, 5. - Quan cal desplaçar finestres. - `Telèfons`_: 2 - `Llistes imbricades`_: `creixent`. .. _Pessetes: http://gie.cs.upc.edu/fi/temes/llistes/Pessetes/ .. _Intercanviar màxim per mínim: http://gie.cs.upc.edu/fi/temes/llistes/Intercanviar_m%C3%A0xim_per_m%C3%ADnim/ .. _Positius i negatius: http://gie.cs.upc.edu/fi/temes/llistes/Positius_i_negatius/ .. _Vectors: http://gie.cs.upc.edu/fi/temes/llistes/Vectors/ .. _Daus: http://gie.cs.upc.edu/fi/temes/llistes/Daus/ .. _Telèfons: http://gie.cs.upc.edu/fi/temes/llistes/Tel%C3%A8fons/