home

Capitulu tertzu.
Comente amanipulare sas listas.


Sa lista est sa istrutura de datos sa prus de importu po ponner inparis ogetos. Una cantidade manna de funtziones pre-paradas funi postas a dispositzione po poder amanipulare sas listas in modos varios, sian issos semplitzes operatziones, comente a ddi mover sos elementos de unu zassu a s'ateru, ( pensade a su jogu de su sedatzeddu po cumprender menzus ite tenimus a mente), fintzas a operatziones meda prus de impinnu comente a dd'aplicare funtziones.
In custu capitulu amustramus medas operatziones chi poden esser fattas chistionande de listas.


3.1


A primu ,a s'incumintzu. Medas computos cumportan s'impreu de una colletzione de ogetos, hamus a narrer una arregorta de cosas matematicas de sa matessi genia e calidade a manera de ddas tenner inparis totu cantas. Custu fattu arrechedit chi sos ogetos, mutidos puru data objects, sian costidos paris in paritzos modos. Una de sas prus comunas istruturas de datos est sa lista.
Sa funtzione pre-parada List[] benit impreada po pesare una lista, o fintzas aintro de parentis grafas si declaran sos elementos suos, chi poden disinnare onnia tipu de valore, cumpresos numeros, simbolos, funtziones,istringas de carateres, ateras listas e cantu potzat esser elementu de una lista. Fintzas Su nudda . Una definitzione pretzisa de ite potzat esser s'inparis boidu, in s'ocurrentzia nostra una lista boida, nono nos cumpetet in custa ocasione: una lista boida est una lista chi non cuntenet elementos, fintzas s'inparis boidu podet esser tando definidu in sa matessi manera: s'inparis boidu est un'inparis chi non cuntenet elementos.


Clear[a,b]
luna:=List[2,5,{1,2},a,b,{x,y,z},{}]
lduas:={2,5,{1,2},a,b,{x,y,z},{}}


Onni elementu tenet aintro de una lista unu postu delatadu, s'indicativu de su cales est s'ordine numericu in sa sutzessione de sos elementos.
In sos esempios de prima su segundu elementu de totu a duas sas listas est 5, s'urtimu de ambasduas est s'imparis boidu, disinnadu in Mathematica cun duas parentisis grafas, una aberta e s'atera serrada intra sas cales no ddu hat nudda. Sa lista boida est unu ogetu de importu mannu meda in sa teoria de sos imparis, chi sian o nono istruturados.
In atzunta a s'impreu de sa funtzione List po pesare listas, s'agatan funtziones chi produen ogetos de cche ponner in d'una lista. Range[iminimu,imaximu,passu] pesat una lista de numeros ordinados, chi moven de iminimu e arrivan a imaximu, chena cche dd'avantzare, aumentande o diminuinde de su tretu de su passu:

Range[-10,10,2]
{-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10}
Range[10,1,-1]
{10, 9, 8, 7, 6, 5, 4, 3, 2, 1}


Cando su passu no est mentovadu su tretu si ponet chi siat uguale a 1:


Range[5,15]
{5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}


Cando funi mancantes sa lacana de josso e su tretu de su passu si pesan ambosduos a esser uguales a 1:


Range[10]
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}


No est netzessariu chi iminimu e imaximu sian uguales a numeros intreos:


Range[2.5,8.5]
{2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5}


Table[espressione,{contadore,iminimu,imaximu,tretu de su passu}] pesat una lista de numeros e de ogetos matematicos valutande su chi hamus indicadu cun espressione unu tantu 'e bortas cantu istabilidu de su contadore, su cales movende de iminimu e arribande a imaximu e aumentande de valore cantu istabilidu de su tretu de su passu custringhet espressione, sa cales est massimamente una espressione altzebrica, a estire pannos numericos.


Table[3 j,{j,1,10,2}]
{3, 9, 15, 21, 27}
Table[j,{j,1,10}]
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Table[j^2,{j,4}]
{1, 4, 9, 16}
Table[Frau,{4}]
{Frau, Frau, Frau, Frau}
Table[Random[],{3}]
{0.399546, 0.662293, 0.404033}
Table[h+k,{h,1,4},{k,1,8}]//TableForm
2 3 4 5 6 7 8 9

3 4 5 6 7 8 9 10

4 5 6 7 8 9 10 11

5 6 7 8 9 10 11 12
Table[h+k,{h,1,8},{k,1,h}]//TableForm
2

3 4

4 5 6

5 6 7 8

6 7 8 9 10

7 8 9 10 11 12

8 9 10 11 12 13 14

9 10 11 12 13 14 15 16


Cumbenit a faer esercitziu meda e a imparare a impreare Table.
Length est una atera funtzione pre-parada. Issa torrat su numeru de elementos de una lista. Dimensions tenet unu sinnificadu prus prufundu.
Pesamus una lista de batoro elementos e passamus unu pagheddu 'e tempus a ddos ispiegare totus. Su primu elementu est sa litera de s'alfabetu sardu a. Su segundu elementu est unu inparis chi cuntenet duos numeros: 1 e 2.
Su tertzu elementu est unu inparis chi cuntenet duos inparis:su primu cun duos numeros e su segundu cun d'unu numeru e un'aterunu inparis cun sa litera x de s'alfabetu.
Su cuartu elementu cuntenet tre elementos, unu numeru, s'inparis boidu, e unu inparis chi cuntenet s'inparis boidu e unu numeru.

salista:={a,{1,2},{{3,4},{5,{x}}},{8,{},{{},9}}}
Length[salista]

4
Dimensions[salista]
{4}
Dimensions[salista[[4]]]
{3}
Dimensions[salista[[4,3]]]
{2}
Dimensions[salista[[4,3,1]]]
{0}
Length[salista[[4,3,1]]]
0



3.2


Su zassu de unu elementu bene ispetzificadu in d'una lista benit determinadu impreande sa funtzione Position. De como a innantis nos riferimus a salista.
Cando cherimus bier sa lista,ca mancari nos semus irmentigados coment'est, nde podimus semper iscrier su numene, comente faimus in s'ordine chi sighit:


salista
{a, {1, 2}, {{3, 4}, {5, {x}}}, {8, {}, {{}, 9}}}
Position[salista,a]
{{1}}


Su risultadu nos informat chi su elementu a s'agatat in su primu postu de salista.


Position[salista,2]
{{2, 2}}


Duos est su segundu elementu de su segundu elementu de salista.


Position[salista,4]
{{3, 1, 2}}


Batoro est su segundu elementu de su primu elementu de su tertzu elementu de salista.
Est a narrer chi su tertzu elementu de salista est una lista: custu tertzu elementu est cumpostu de listas, in particulare su primu elementu est una lista; su segundu elementu de custa lista est batoro.
Provade a faer una previsione: cale hat a esser sa resposta a sa pregunta de inue s'agatat x? E ite cheret narrer custa arresposta? E ite hat a cherrer narrer sa resposta a sa pregunta inue s'agatat sa lista boida? Comente minimu, ma custu si cumprendet, chi in salista est presente duas bortas, e posca?


Position[salista,x]
{{3, 2, 2, 1}}
Position[salista,{}]
{{4, 2}, {4, 3, 1}}



3.3


Tratamus de comente cche ogare elementos de una lista e de comente acontzare a bellu nou una lista.
Si connoschimus su zassu pretzisu inue s'agatat unu elementu no est difitzile a cche ddu ogare de una lista a foras. Tratamus semper sos elementos de salista.


salista
{a, {1, 2}, {{3, 4}, {5, {x}}}, {8, {}, {{}, 9}}}


Ischimus chi su elementu a est in su primu postu.
S'elementu, chi poi est una lista, {1,2} s'agatat in su segundu postu.
E su numeru otto est su primu elementu de su cuartu.
Part est sa funtzione chi servit a cche ogare unu elementu de una lista. Sa notatzione sua postfissa funi duas parentis cuadras a intro de sas cales una sutzessione de numeros mentovat s'indiritzu de su elementu leadu in cunsideru.


Part[salista,1]
a
Part[salista,2]
{1, 2}
Part[salista,4,1]
8
salista[[4,1]]
8


De una lista cche podimus a disitzu nostru eliminare elementos ispetzificande s'indiritzu issoro cun sa funtzione Take.


Take[salista,3]
{a, {1, 2}, {{3, 4}, {5, {x}}}}
Take[salista,-2]
{{{3, 4}, {5, {x}}}, {8, {}, {{}, 9}}}


Si cherimus podimus leare in cunsideru su fattu de cche ogare a pizu elementos cunsecutivos de un puntu delatadu a contare de s'incumintzu o de sa fine. Pesamus un'atera lista prus a discantzu a dda tratare.


ateralista:={1,2,3,a,b,c,d,4,5,6}
Take[ateralista,{4,6}]

{a, b, c}
Take[ateralista,{-7,-4}]
{a, b, c, d}
Take[ateralista,{-7,7}]
{a, b, c, d}


Cche podimus iscardinare elementos, de una lista, e mantenner firmos solu sos chi abarran. Si poden mover elementos de s'incumintzu, de sa fine, o de unu zassu delatadu a un'aterunu.


Drop[ateralista,3]

{a, b, c, d, 4, 5, 6}
Drop[ateralista,-3]
{1, 2, 3, a, b, c, d}
Drop[ateralista,{2,6}]
{1, d, 4, 5, 6}


Si poden eliminare elementos, a unu a unu, ispetzificande s'indiritzu issoro.


Delete[ateralista,{{3},{5},{7}}]
{1, 2, a, c, 4, 5, 6}


Podimus preguntare e cale est su primu elementu e cale est s'urtimu. E ite abarrat de una lista si cche ogamus su primu.


First[salista]
a
Last[salista]
{8, {}, {{}, 9}}
Rest[salista]

{{1, 2}, {{3, 4}, {5, {x}}}, {8, {}, {{}, 9}}}


In d'una lista podimus seletzionare elementos a segundu de unu criteriu.


Select[ateralista,NumberQ]

{1, 2, 3, 4, 5, 6}
Select[ateralista,NumberQ->False]
{}


Podimus ortulare a fund'in susu sos elementos de una lista.


Reverse[ateralista]
{6, 5, 4, d, c, b, a, 3, 2, 1}


O si cherimus ddos podimus ordinare, e tando a primu benin sos numeros e posca sas literas, e sos primos benin cunsiderados in ordine creschente e sas segundas in ordine lessicograficu, alfabeticu.


Sort[ateralista]
{1, 2, 3, 4, 5, 6, a, b, c, d}


E posca podimus ortulare una lista de manca a dereta, o de dereta a manca a mover de su zassu de unu elementu in sa lista.


RotateLeft[ateralista]
{2, 3, a, b, c, d, 4, 5, 6, 1}
RotateRight[ateralista,4]
{d, 4, 5, 6, 1, 2, 3, a, b, c}


Podimus disacumpanzare sos elementos de una lista. Tenide a contivitzu mannu comente fuan sos elementos de salista.


salista
{a, {1, 2}, {{3, 4}, {5, {x}}}, {8, {}, {{}, 9}}}
Flatten[salista]
{a, 1, 2, 3, 4, 5, x, 8, 9}


E cherende ddos podimus acumpanzare.

Partition[ateralista,3]

{{1, 2, 3}, {a, b, c}, {d, 4, 5}}


In listas de listas, cando sos elementos benin amustrados in tabellas, in rigas e culunnas, custas urtimas si poden iscambiare faende in manera chi sas culunnas diventen rigas. S'urtima lista chi hamus pesadu dda mutimus listanoa.

listanoa:=Partition[ateralista,3]
listanoa//TableForm

1 2 3

a b c

d 4 5
Transpose[listanoa]//TableForm
1 a d

2 b 4

3 c 5


E tantas ateras operatziones poden esser fattas: s'hat semper a tenner bisonzu de cunsultare a bella presse su manuale, de ischire de pretzisu ite est chi cherimus faer e, su cantu prus possibile, isfrutare sas funtziones pre-paradas. Ateros esempios funi custos chi nos cunsentin de atzunghere elementos a s'incomintzu, in mesu o s'acabada de una lista una orta declaradu unu indiritzu, o cambiare unu elementu cun d'un'ateru.


Append[{a,b,c},9]
{a, b, c, 9}
Prepend[{a,b,c},8]
{8, a, b, c}
Insert[{a,b,c},7,2]
{a, 7, b, c}
ReplacePart[{a,b,c},6,3]
{a, b, 6}



3.4


Podet semper capitare de triballare cun paritzas listas totu inparis.Giai de inantis hamus impreadu funtziones chi arrechedin cales argumentos issoro prus de una lista.
Tenende a contu sas carateristicas assiomaticas de sas operatziones in sos inparis e sos numenes issoro a s'inglesa, Mathematica nos pre-parat custas funtziones:


Join[{a,b,c},{x,y,z}]
{a, b, c, x, y, z}
Union[{4,5,6},{6,7,8}]
{4, 5, 6, 7, 8}
Union[{4,1,4,1,4,1},{}]
{1, 4}
Complement[{1,2,3,a,b,c},{2,3,a,b}]
{1, c}
Intersection[{1,2,3,a,b,c},{2,3,a,b,x,y}]
{2, 3, a, b}



3.5

 

S'agatan fintzas funtziones de ordine superiore. Talunas funtziones pre-paradas, e ateras chi hamus a iscrier nois, arrechedin po argumentos ateras funtziones. Si tratat tando de funtziones de funtziones, o funtziones cumpostas, o funtziones de ordine superiore. Funi sas aliagas programmatorias sas prus potentes. Map aplicat una funtzione a totu sos elementos de una lista. Pensamus a su simbolu h comente a una funtzione: tando h benit aplicadu a totu sa lista.


Map[h,{1,2,3}]
{h[1], h[2], h[3]}


E si su simbolu h esseret istadu una funtzione? Ponimus Reverse? O si nono Sort. O ateras,. Sas funtziones benin totus aplicadas.


Map[Reverse,{{1,2},{3,4},{5,6}}]
{{2, 1}, {4, 3}, {6, 5}}
Map[Sort,{{4,1,7,3},{u,e,a,f}}]
{{1, 3, 4, 7}, {a, e, f, u}}


Sa funtzione MapThread[] acumpanzada a atera funtzione leat sos elementos de una lista e sos chi ddi currisponden in d'un'atera e pesat ateruna lista.


MapThread[k,{{a,b,c},{w,t,z}}]
{k[a, w], k[b, t], k[c, z]}
MapThread[Power,{{3,4,5},{1,2,3}}]
{3, 16, 125}
MapThread[Times,{{4,6,9},{9,6,4}}]
{36, 36, 36}
MapThread[List,{{a,b,c},{x,y,z},{q,r,t}}]
{{a, x, q}, {b, y, r}, {c, z, t}}
Partition[MapThread[Plus,{{a,b,c},{x,y,z}}],1]
{{a + x}, {b + y}, {c + z}}


Medas funtziones pre-paradas chi arrechedin unu argumentu solu, tenen su donu, cando s'argumentu est una lista, de essere aplicadas in automaticu a totu sos elementos de sa lista: benin mapadas a totu sos elementos de sa lista. Log est una de custa funtziones.


Log[{2.3,5.6,7.8}]
{0.832909, 1.72277, 2.05412}
Map[Log,{2.3,5.6,7.8}]
{0.832909, 1.72277, 2.05412}


Medas funtziones pre-paradas chi arrecheden duos o de prus argumentos tenen su donu, cando listas multiplas funi argumentos issoro, de esser aplicadas in automaticu a totu sos elementos chi in sas listas si currisponden. In ateros faeddos, custas funtziones funi tratadas cun Thread po totu sos elementos de sa lista. Custu donu si narat Listable.


{2,4,6}+{5,8,9}
{7, 12, 15}
MapThread[Plus,{{2,4,6},{5,8,9}}]
{7, 12, 15}
Attributes[Log]
{Listable, Protected}
Attributes[Plus]
{Flat, Listable, OneIdentity, Orderless, Protected}


Si cherimus cambiare sos elementos de una lista in argumentos po ateruna funtzione, si podet.


Apply[f,List[q,w,e,r,t]]
f[q, w, e, r, t]


Si biet chi List est istada sostituida cun f. Sighide cun atentzione custos iscovieddos:


Apply[Plus,{1,2,3,4,5}]
15
Apply[k,{{1,2,3},{4,5,6}}]
k[{1, 2, 3}, {4, 5, 6}]
Apply[Plus,{{1,2,3},{6,8,10}}]
{7, 10, 13}
Apply[Power,{{x,y},{2,3}}]
   2    3
{x , y }


3.6


Po isorber sistemas lineares s'impreat meda una metodica, connota comente sa metodica de Cramer.
Amustramus custa metodica, chi a parte unu cunditzionale, triballat solu cun sas listas. Est una funtzione lichita meda. Est comente si biet unu programma, s'impreu de sa potentzia de calculu de unu limbazu artefattu, (artificiale), iscrittu una orta solu e impreadu semper cando serbit.


cramer[ht_List,kt_List]:=
Module[{i},
If[(Det[ht]==0)&&(Det[
Transpose[
Prepend[
Drop[
Transpose[ht],1],kt]]]!=0),
Print["sistema impossibile"],
If[(Det[htt]==0)&&(Det[
Transpose[
Prepend[
Drop[
Transpose[ht],1],kt]]]==0),
Print["sistema indeterminato"],
Table[
Det[
Transpose[
RotateRight[
Prepend[
Drop[
RotateLeft[
Transpose[ht],i],1],kt],i]]]/Det[ht],
{i,0,Length[kt]-1}]]]];
cramer[{{1,2},{3,4}},{5,6}]

9
{-4, -}
2


Sas duas ecuatziones de su sistema funi:
x+2 y=5 e 3 x+4 y=6. E tando sa prima lista est cussa chi si narat sa matrice de su sistema, e sa segunda su chi si narat su vetore de sos termines connotos.
Hamus a torrare susu sa metodica de Cramer cando hamus a deper chistionare de archivios e de funtziones fattas de nois e totu.


N[cramer[{{2,3,5},{1,-2,4},{2,6,1}},{3,6,1}]]
{5.57895, -1.57895, -0.684211}

home