Instruilo por la programlingvo Pitono

Bonvolu sendi korektojn, proponojn, kaj sugestojn al vilcxjo ĉe esperanto-me.org

Listoj - Kondiĉoj - Komparoj

Pli pri Listoj

Stakoj kaj Rektvicoj

Listaj Komprenecoj

Pli pri Kondiĉoj

Pli pri Komparoj

Plu pri Listoj

 La datumtipo Listo havas plu da metodoj. Jen ĉiuj metodoj de listaj objektoj:

append(z)

Aldonu eron al listo. Egalas al a[len(a):]= [z].

extend(L) 

       Aldonu liston al listo. Egalas a[len(a):]= L.

insert(i, z)

Enmetu listeron ĉe specifa loko. La unua argumento estas la indico de la ero tuj post la enmetloko, do a.insert(0, z)enmetas eron z antaŭ la aktuala komenco de la listo, kaj a.insert(len(a), z) enmetas eron z post la aktuala fino de la listo

remove(z)

Forigu la unuan eron en la listo kies valoro estas z. Okazas eraro se valoro ne ekzistas en la listo.

pop([n])

     Forigu la eron ĉe la  n-a pozicio en la listo, kaj resendu ĝin. Se oni ne specifas indicon, a.pop() forigas la lastan listeron kaj resendas ĝin. (Rimarku, la ortaj krampoj en la defino signifas, ke la parametro ne estas postulata - ne tajpu la ortajn krampojn).

 index(z) 

Resendu indicon de la unua ero en la listo kies valoro estas z. Okazas eraro se valoro ne ekzistas en la listo.

count(z) 

Resendu nombron de okazoj de z en la listo.

 sort()            

Ordigu la erojn de la listo (en la saman liston).

 reverse() 

Inversigu la erojn de la listo (en la saman liston).

 Jen ekzemplo, kiu uzas ĉiujn listajn metodojn:

   >>> a = [66.6, 333, 333, 1, 1234.5]
>>> print a.count(333), a.count(66.6), a.count('z')
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.6, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.6, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.6]
>>> a.sort()
>>> a
[-1, 1, 66.6, 333, 333, 1234.5]

Stakoj kaj Rektvicoj

Uzu metodojn append() kaj pop() por krei stakon ("laste enmetita, unue deprenita").

   >>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack [3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

Uzi metodojn append() kaj pop() por krei rektvicon ("unue enmetita, unue deprenita")

   >>> queue = ["Eriko", "Johano", "Miko"]
>>> queue.append("Vilĉjo")
>>> queue.append("Maria")
>>> queue.pop(0)
'Eriko'
>>> queue.pop(0)
'Johano'
>>> queue
['Miko', 'Vilĉjo', 'Maria']

Listaj Komprenecoj

Listaj konprenecoj provizas metodon krei listojn sen la uzo de funkcioj map(), filter() kaj/aŭ lambda. La rezulto emas esti pli klara ol tio uzante tiujn funkciojn. Ĉiu lista kompreneco konsistas el esprimo kaj sekve frazon for, poste nul aŭ pli frazoj forif. La rezulto estos listo rezultante de la elvalorigo de la esprimo en la kunteksto de la for kaj if frazoj kiu sekvas ĝin.
Se la esprmo estas elvalorigita kiel opo, oni devas meti ĝin en rondaj krampoj.

   >>> freŝfrukto = [' banano', ' pomo ', 'vinbero  ']
>>> [weapon.strip() for weapon in freŝŝhfrukto
#senigu spacetojn
['banano', 'pomo', 'vinbero']
>>> vec = [2, 4, 6]
>>> [3*x for x in vec]

[6, 12, 18]
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]
>>> [[x,x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]
>>> [x, x**2 for x in vec] #eraro-opoj bezonas rondajn krampojn
  File "<stdin>", line 1, in ?
    [x, x**2 for x in vec]
               ^
SyntaxError: invalid syntax
>>> [(x, x**2) for x in vec] #ĝusta
[(2, 4), (4, 16), (6, 36)]
>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]

[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

Pli pri Kondiĉoj

La kondiĉoj uzata en instrukcioj while kaj if povas enhavi aliajn operatorojn krom bazaj komparaj operatoroj.

 La operatoroj in kaj not in kontrolas ĉu valoro okazas (ne okazas) en sekvenco. La operatoroj is kaj is not trovas ĉu du objektoj estas vere la sama objekto; ĉi tiu gravas nur por ŝanĝiĝeblaj objektoj, kiel listoj. Ĉiuj komparaj operatoroj havas samajn prioritatojn, nome sub tio de numeraj operatoroj.

Vi povas fari multaj komparojn en unu esprimo. Ekz: a < b == c testas ĉu a estas pli ol b kaj plue b egalas b.

 Vi povas kombini komparojn per la duumaj operatoroj and kaj or, kaj la rezulto de la komparo (aŭ iu ajn duuma esprimo) povas esti inversita per la operatoro not. Ĉi tiuj duumaj operatoroj havas malpli prioritaton ol la komparaj operatoro: el la duumaj operatoroj, not havas pli altan prioritaton, or havas la malplian, do A and not B or C egalas (A and (not B)) or C. Kompreneble, vi povas uzi rondajn krampojn por esprimi la precizan ordon.

La duumaj operatoroj and kaj or estas kurt-cirkvitaj operatoroj. Ili estas valorigitaj de la maldekstra al la dekstra, kaj valorigado ĉesas kiam la rezulto estas jam konkludita. Ekz., se A kaj C estas veraj sed B estas malvera, A and B and C ne valorigas la esprimon C.

 Eblas valorizi variablon per  rezulto de komparo aŭ duuma esprimo. Generale, la rezulto estas la lasta valorigita argumento. Por ekzemplo,

   >>> ĉeno1, ĉeno2, ĉeno3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = ĉeno1 or ĉeno2 or ĉeno3
>>> non_null

'Trondheim'

Rimarku, ke ĉe Pitono, malsame kiel programlingvo C, valorizado ne povas okazi en esprimoj. Ĉi tiu evitas oftan problemon, ke oni tajpas = en esprimo kiam oni intencas ==.

Pli pri Komparoj

 Vi povas kompari sinsekvajn objektojn al aliaj objektoj kun la sama sinsekva tipo.

Komparo uzas leksikografian ordon: unue, Pitono komparas la unuajn erojn el ĉiu sekvenco. Se ili ne egalas, la komparo estas finita. Se ili egalas, Pitono komparas la sekvajn du erojn, k.t.p. ĝis iu sekvenco estas elĉerpita. Se la eroj de la komparo estas mem sekvencoj, la komparo okazas rekursie. Se ĉiuj eroj de du sekvencoj egalas, la sekvencoj estas egala. Se unu sekvenco estas komenca subsekvenco de alia, la malpli longa estas malpli ol la pli longa. La leksikografia ordado por ĉenoj uzas la ASCII-an ordon por individuaj signoj. Jen iom da ekzemploj de komparoj de sekvencoj samtipaj:

 (1, 2, 3) < (1, 2, 4)

[1, 2, 3] < [1, 2, 4]

'ABC' < 'C' < 'Pascal' < 'Python'

(1, 2, 3, 4) < (1, 2, 4)

(1, 2) < (1, 2, -1)

(1, 2, 3) = (1.0, 2.0, 3.0)

(1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'),
4)

 Rimarku, ke kompari objektojn de malsamaj tipoj estas laŭleĝa. La rezulto estas nehazarda sed arbitra, ka eble ŝanĝos en venontaj versioj de Pitono. Do, listo estas ĉiam malpli granda ol ĉeno, ĉeno estas ĉiam malpli granda ol opo, k.t.p. Pitono komparas miksitajn numerajn tipojn per nombra valoro, do 0 egalas 0.0, k.t.p.

Supren