Kurs  Cours

6. Manipulation von Listen
 Manipulation de listes

Die Gliederung dieses Kurses folgt in groben Zügen dem Buch von Nancy Blachman: A Practical Approach.... 
Hinweis: Kapitel 6 lesen!
 L'articulation de ce cours correspond à peu près à celle du livre de Nancy Blachman: A Practical Approach.... 
Indication: Lire le chapitre 6.
WIR94/98/99 // Copyright Rolf Wirz

6.0. Einleitung
     Introduction

Listen - was sind Listen - was ist das?
  Des listes - qu'est - ce?

??List

Eingabe einer Liste:
 Entrer une liste:

list0 = {5, 4.78, a, 8x + y, Sin[x], D, 
Integer, x->E}

Oft gibt Mathematica auch Listen aus. Beispiel:
  Mathematica sort souvent des listes. Exemple:

Solve[{2x + 5y == 19, 3x + 7y == 27}]

Hier ist eine Liste mit einer Liste ausgegeben worden.
  Ici on a sorti une liste qui contient une liste.

Ebenso z.B. bei "Options":
  Egalement p.ex. avec "Options":

Options[NIntegrate]

Hier ist eine Liste  ausgegeben worden.
  Ici on a sorti une liste.

6.1. Erzeugung von Listen
     Générer des listes

6.1.1. Befehle
       Ordres

Zur Erzeugung von Listen stehen verschiedene Befehle zur Verfügung:
  Pour créer des listes on a plusieurs ordres à disposition:

??Range

??Table

??Array

6.1.2. Erzeugung einer Liste mit "Range"
       Créer une liste avec "Range"

Beispiele:    Exemples:

Range[5]

Range[7.896]

Range[6,12]

Range[3.4, 8.7]

Range[3.4, 8.7, 1.2]

6.1.3. Erzeugung einer Liste mit "Table"
 Générer des listes avec "Table"

Beispiele:    Exemples:

Table[hoi,{6}]

Table[i!,{i, 6}]

Table[3i,{i, 6, 14}]

Table[i,{i, 4, 40, 5}]

Table[{i, i^2},{i, 5}]

Table[a[i] + b[j], {i, 1, 3}, {j, 4, 6}]

Das ist eine Liste von Listen, d.h. eine Matrix.
Zur besseren Darstellung verwenden wir "MatrixForm":
  C'est une liste de listes, c'est-à-dire une matrice. 
Pour plus de clarté nous utilisons "MatrixForm"

MatrixForm[%]

Ein Iterator kann auch von einem andern abhängen:
  Un itérateur peut aussi dépendre d'un autre:

Table[a[i] + b[j], {i, 1, 3}, {j, i, 6}]

MatrixForm[%]

6.1.4. "Array" 
       "Array"

Mit "Array" kann man eine symbolische Matrix erzeugen:
  Avec "Array" on peut créer une matrice symbolique:

Clear[a]

Array[a,{2, 3}]

MatrixForm[%]

a = 17; Array[a,{2, 3}] // MatrixForm

6.2. Umordnen von Listen
     Ranger autrement des listes

6.2.1. Befehle
       Ordres

??Sort

??Reverse

??RotateLeft

??RotateRight

??Permutations

??Drop

??Take

??First

??Last

??Part

??Rest

??Select

6.2.2. Anwendungen 
       Applications

Hier einige Beispiele:
  Voici quelques exemples:

listA = Table[Random[Integer, {0, 12}],{16}]

Sort[listA]

Union[listA]

"Sort" sortiert die Liste, "Union" sortiert sie auch, eliminiert aber Duplikate
 von Elementen.
   "Sort" trie la liste, "Union" la trie aussi, mais élimine les doubles des éléments.

Reverse[listA]

RotateLeft[%,3]

RotateRight[%,4]

Permutations[{a, b, c}]

Permutations[{a, b, b}]

6.3. Erweiterung und Verkürzung von Listen
     Allonger et raccourcir des listes

6.3.1. Befehle
       Ordres

Probiere aus:    Essaie:

?Append

?AppendTo

?Drop

?Insert

?Prepend

?PrependTo

?Rest

?Take

?First

?Last

?Part

?Select

6.3.2. Beispiele
       Exemples

Probiere aus:    Essaie:

Print[listA];
Rest[listA]

Was ist passiert?
  Que s'est-il passé?

Drop[listA, 10]

Drop[listA, -5]

Drop[listA, {2}]

Drop[listA, {1}]

Drop[listA, {3}]

Drop[listA, {1,8}]

Drop[listA, {4,12}]

Take[listA,4]

Take[listA,-6]

Take[listA,{4,6}]

Append[listA, 99]

Prepend[listA, 100]

Insert[listA, 999, 4]

listA

Bei all diesen Operationen ist "listA" unverändert geblieben. Nicht aber bei den folgenden Operationen:
  Pendant toutes ces opérations "listA" n'a pas changé. Cela n'est pas le cas pour les opérations suivantes:

Print[listA];
AppendTo[listA, 2000]

PrependTo[listA, 555]

6.4. Zählung der Elemente einer Liste
     Compter les éléments d'une liste

6.4.1. Befehle:
       Ordres:

Probiere aus:    Essaie:

?Length

?Dimensions

6.4.2. Anwendungen
       Applications

Length[listA]

Length[{a, 4, 2^8, t^2 + 2t - 6, matrix}]

Length[{{a, 4, 2^8, t^2 + 2t - 6, matrix}, 
		listA}]

Dimensions[{{a, 4, 2^8, t^2 + 2t - 6, matrix}, 
			listA}]

Dimensions[{{a, 4, 2^8, t^2 + 2t - 6, matrix}, 
			listA}, 0]

Dimensions[{{a, 4, 2^8, t^2 + 2t - 6, matrix}, 
			listA}, 1]

Dimensions[{{a, 4, 2^8, t^2 + 2t - 6, matrix}, 
			listA}, 2]

MatrixForm[{{a, 4, 2^8, t^2 + 2t - 6, matrix}, 
			listA}]

Dimensions[{{a, 4, 2^8, t^2 + 2t - 6}, 
			{1, 2, 3, 4}}, 2]

MatrixForm[{{a, 4, 2^8, t^2 + 2t - 6}, 
			{1, 2, 3, 4}}]

6.5. Zusammenfügen von Listen, Beziehungen
       zwischen Listen
     Assemblage de listes, relations entre listes

6.5.1. Befehle
       Ordres

Probiere aus:    Essaie

?Complement

?Union

?Join

?Intersection

6.5.2. Anwendungen
       Applications

Complement[{1, 2, 3, 4, 5},{1, 2, 3}]

Intersection[{a, b, c, d, e, f},
				{d, e, f, g, h, i, j, k}]

Union[{a, b, c, d, e, f},
						{d, e, f, g, h, i, j, k}]

Union[{1, 1, 1, 1, 2, 1, 3, 3, 3, 2, 4, 2, 4, 4, 
				3, 3, 3}]

Join[{a, b, c, d, e, f},{d, e, f, g, h, i, j, k}]

Join[{1, 2, 1, 1, 2, 2},{1, 2, 2, 1, 3, 2, 1, 
				3, 3}]

Union[{1, 2, 1, 1, 2, 2},{1, 2, 2, 1, 3, 2, 1, 
				3, 3}]

6.6. Veränderung der Form einer Liste
     Changer la forme d'une liste

6.6.1. Befehle
        Ordres

Probiere aus:    Essaie:

?Flatten

?Partition

?Transpose

6.6.2. Anwendungen
       Applications

vector1 = Range[10]

matrix1 = Partition[vector1, 5]

MatrixForm[matrix1]

matrix2 = Partition[vector1, 4]

matrix3 = Partition[vector1, 3]

matrix4 = Partition[vector1, 2.5]

Was ist passiert?
  Que s'est-il passé?

Partition[{1, 35, 432, 2, 5467, 4, 3, 987, 87},
										 3]

Partition[{1, 2, 3, 4, 5, 6, 7}, 3, 1]

Partition[{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, 
			{a, b, c}}, 2, 1]

Print[matrix1];
Flatten[matrix1]

m = {{1, 2, 3, a},{4, 5, 6, b}}

Transpose[m]

Print[MatrixForm[m]];
MatrixForm[Transpose[m]]

6.7. Elemente herauspicken
     Choisir quelques éléments

6.7.1. Befehle
        Ordres

Oben sind schon "First", "Last" und "Part erwähnt worden.
  Plus haut on a déjà nommé "First", "Last", et "Post".

6.7.2.  Anwendungen
          Applications

liste1 = {a, b, c, d, e, f, g}

First[liste1]

Last[liste1]

liste1[[4]]

Print[{liste1[[2]],liste1[[3]],liste1[[4]],
		liste1[[5]]}]

liste1[[ Range[2, 5] ]]

array1 = Array[a, {2, 2}]

array1[[2]]

array1[[1, 2]]

6.8. Auswahl von Daten
     Choisir des données

6.8.1. Befehle
        Ordres

Probiere aus:    Essaie:

?Select

?*Q

?DigitQ

?IntegerQ

?LetterQ

?LowerCaseQ

?MachineNumberQ

?MatrixQ

?NameQ

?NumberQ

?OddQ

?EvenQ

?PrimeQ

?UpperCaseQ

?ValueQ

?VectorQ

?Positiv*

?Negat*

6.8.2. Anwendungen
         Applications

Probiere aus:    Essaie:

MemberQ[liste1, 3]

MemberQ[liste1, a]

menge = {-4, 3, 5.678, emil, Emma, 4, 0, -2, -4, 
			Pi, 2^(1/2)}

Select[menge, Positive]

Select[{a, b, c, d, x, y, z}, Positive]

Bei "Select" steht also hinten das Selektionskriterium. Solche Kriterien kann man selbst definieren. Beispiel:
  Quant à "Select", le critère de sélection se trouve à la fin. On peut définir soi-même de tels critères. Exemple:

?Precision

?===

exakt[x_] := Precision[x] === Infinity

Select[{-6, 0, 3, 3.1414333, 1.111111, Pi, E, 
		N[Sqrt[2], 10], 5.66}, exakt]

6.9. Rechnen mit Listen
     Calculer avec des listes

6.9.1. Befehle
        Ordres

?Sum

?Plus

?Apply

6.9.2. Wie man's macht:
        C'est ainsi que cela se fait:

Sum[n^2, {n, 7}]

meineDaten = {3.4, 6.1, 5.3}

Sum[meineDaten[[n]], {n, Length[meineDaten]}]

Plus[1, 1, 1, 1, 1]

Plus[1, 2, 3, 4, 5]

Plus[a, b, c, d]

Plus[{a, b, c, d}]

??Plus

"Plus" hat das Attribut "Listable". 
  "Plus" a l'attribut "Listable".

??Listable

"Plus" auf eine Liste angewandt addiert nur ein Element, nämlich die Liste selbst. Wie nun "Plus" aber auf die Elemente anwenden?  - So:
  "Plus" appliqué à une liste additionne seulement un élément, c'est-à-dire la liste même. Comment appliquer "Plus" aux éléments? - Ainsi:

Apply[Plus, {a, b, c, d}]

Was geht nun schneller, "Sum" oder "Plus" ?
  Qu'est-ce qui est plus rapide, "Sum" ou "Plus"?

Timing[Apply[Plus, Range[500]]]

Timing[Sum[n, {n, 500}]]

6.10. Auf Listen anwendbare arithmetische 
         Funktionen
       Fonctions arithmétiques applicables à des 
         listes

Beispiele
 Exemples

Wir wenden "Log" auf eine Liste an:
 Nous appliquons "Log" à une liste:

??Log

Log[{1, 2, 3, 4, 5, 6, 7}]

N[%]

Oder mit "Sinus":
  Ou avec "Sinus":

Sin[{1, 2, 3, 4, 5, 6, 7}]

Sin[{1, 2, 3, 4, 5, 6, 7}] // N

Oder "Plus":
  Ou "Plus":

?Plus

?*Form*

FullForm[a + b]

Plus[{1, 2, 3, 4}, {a, b, c, d}]

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

Attribute einiger Funktionen:
  Attributs de quelques fonctions:

Attributes[{Exp, Log, Sin, Cos, Plus, Times}]

Attributes[Attributes]

"Attributes" hat also auch das Attribut "Listable".
  "Attributes" a donc aussi l'attribut "Listable".

6.11. Listable und Map
        Listable et Map

6.11.1. Befehle
         Ordres

Probiere:    Essaie:

??Map

?Listable

?Apply

6.11.2. Anwendungen
         Applications

Es gibt zwei Wege, eine Funktion auf eine Liste anzuwenden: mit "Listable" als Attribut und mit der Funktion "Map". Probiere:
  Il y a deux façons d'appliquer une fonction à une liste: avec l'attribut "List" et avec la fonction "Map". Essaie:

f[{1, 2, 3, 4, 5, 6}]

?f

f ist nicht "Listable".
  F n'est pas "Listable"

Map[f, {1, 2, 3, 4, 5, 6}]

So geht's! Oder so:
  Voilà! Ou ainsi:

Map[f, a x^2 + b x + c]

Map wirkt auf die Teile eines Ausdrucks! Beachte:
  Map a un effet sur les parties d'une expression! Remarque:

Map[f, {a, b, c, d, e}]

Apply[f, {a, b, c, d, e}]

Mit  Apply wird f angewandt auf die Elemente der Menge als Ganzes, während mit Map diejenige Menge gebildet wird, die als neue Elemente die Funktionswerte der einzelnen alten Elemente enthält.
  Avec Apply on applique f aux éléments de l'ensemble comme un tout, tandis qu'avec Map on forme l'ensemble qui contient en tant qu'éléments nouveaux les valeurs des fonctions des vieux éléments.

Statt  Apply und Map kann man auch /@ und @@ benutzen. Beispiele:
  On peut employer aussi /@ et @@ au lieu de Apply et Map. Exemple:

f/@{a, b, c, d, e}

f@@{a, b, c, d, e}

Sin/@{0, Pi, 2 Pi, 2, 3, 4, 5, 6}

f1[x_, y_,z_]:= Sin[x z^2] Cos[y]

f1@@{1, 2, 3}

6.12. Formatierung von Listen
       Formater des listes

6.12.1. Befehle 
         Ordres

Probiere:    Essaie:

?ColumnForm

?MatrixForm

?TableForm

6.12.2. Beispiele
         Exemples

?Binomial

pascal[n_]:= Table[Binomial[n, i],{i, 0, n}]

pascal[5]

Table[pascal[n],{n, 0, 5}]

ColumnForm[Table[pascal[n],{n, 0, 5}]]

ColumnForm[Table[pascal[n],{n, 0, 5}], Center]

ColumnForm[Table[pascal[n],{n, 0, 5}], Right]

ColumnForm[Table[pascal[n],{n, 0, 5}], Left]

TableForm[Table[pascal[n],{n, 0, 5}]]

MatrixForm[Table[pascal[n],{n, 0, 5}]]

MatrixForm[Table[n - i,{i,5},{n, 5}]]

"Putzmaschine" einsetzen
 Employer la "machine de nettoyage"

Remove["Global`@*"]