<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.bioinfo.nat.tu-bs.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mka</id>
	<title>Bioinformatik Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.bioinfo.nat.tu-bs.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mka"/>
	<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/Special:Contributions/Mka"/>
	<updated>2026-05-28T19:11:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=960</id>
		<title>6.Normalisierungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=960"/>
		<updated>2022-06-01T11:53:02Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* a: Normalisierung mit RPKM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aufgabe 1: Grundlagen== &lt;br /&gt;
===a:  Warum ist es notwendig RNASeq Daten zu normalisieren?=== &lt;br /&gt;
*Eliminieren von statischen Abweichungen, die durch z.B. verschiedene Durchführungsrunden, unterschiedliche Bedingungen, Laborausstattung, Experimentatoren, …  entstehen&lt;br /&gt;
* Heterologe Geneigenschaften können zu unterschiedlichen Ergebnissen bei eigentlich gleicher Genexpression führen&lt;br /&gt;
* Vergleichbarkeit von Proben ermöglichen&lt;br /&gt;
&lt;br /&gt;
===b: Rolle der Sequenziertiefe und Genlänge===&lt;br /&gt;
Die Sequenziertiefen und Genlängen müssen normalisiert werden, um die erhaltenen RNASeq Daten miteinander vergleichen zu können, da diese oft sehr unterschiedlich sind und das die Auswertung beeinflussen kann. So erhält man für längere Gene möglicherweise mehr reads, als für kürzere Gene, obwohl die Genexpression gleich ist. Der Fehlschluss liegt nah, dass das längere Gen stärker exprimiert wird. Bei einer hohen Sequenziertiefe erhält man mehr reads, als bei einer niedrigen Sequenziertiefe. Dabei muss das Verhältnis der erhaltenen reads für ein Gen, zu der Gesamtzahl an reads einer Sequenzierung betrachtet werden. Dies ist durch Normalisierungen möglich.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 2: RPKM und TPM==&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen &amp;amp; Genlänge (L) !! Counts (c) Replikat 1 !! Counts (c) Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A (7 kb) || 5 || 16&lt;br /&gt;
|-&lt;br /&gt;
| B (12 kb) || 10 || 36&lt;br /&gt;
|-&lt;br /&gt;
| C (0,5 kb) || 2 || 8&lt;br /&gt;
|-&lt;br /&gt;
| D (25 kb) || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
===a: Normalisierung mit RPKM===&lt;br /&gt;
* RPKM steht für 'Reads per kilobase of transcript per Million mapped reads' &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt; RPKM =  \frac{ c_\text{i}}{L_\text{i} \cdot N} * 10^6 &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
 &amp;lt;math&amp;gt;   \frac{ c_\text{i}}{L_\text{i}} &amp;lt;/math&amp;gt;  → Normalisierung der Genlänge &amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; L_\text{i} \cdot N &amp;lt;/math&amp;gt; → Normalisierung der Sequenziertiefe &lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; RPKM (A1) =  \frac{ 5}{7 kb \cdot 18} * 10^6 = 3,97 * 10^4&amp;lt;/math&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! RPKM Replikat 1 !! RPKM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 3,97 * 10^4 || 3,81 * 10^4&lt;br /&gt;
|-&lt;br /&gt;
| B || 4,63 * 10^4 || 5 * 10^4&lt;br /&gt;
|-&lt;br /&gt;
| C || 2,222 * 10^5 || 2,667 * 10^5&lt;br /&gt;
|-&lt;br /&gt;
| D || 2,2 * 10^3 || 0&lt;br /&gt;
|}&lt;br /&gt;
* Ein hoher RPKM Wert, sagt aus, dass die Genexpression stärker ist, als bei einem niedrigeren RPKM Wert, indem die Größe des Gens berücksichtigt wird. &lt;br /&gt;
* Zum Vergleich der Genexpression innerhalb einer Probe, können die RPKM Werte genutzt werden, sie sind jedoch nicht dafür geeignet Genexpressionen von Genen verschiedener Proben miteinander zu vergleichen, da die Bedingungen meist sehr unterschiedlich sind und falsche Aussagen über die Genexpressionen gemacht werden können. Die Summe aller RPKMs ergibt nicht 100 % und kann somit keine Anteile am Ganzen widerspiegeln.&lt;br /&gt;
&lt;br /&gt;
===b: Normalisierung mit TPM===&lt;br /&gt;
* TPM steht für 'Transcripts per Million. &lt;br /&gt;
* Wenn 1 Millionen Transkripte sequenziert werden würden, wäre TPMi die Anzahl an Transkripten des Typs 'i'.&lt;br /&gt;
* Bei TPM wird außerdem die totale Anzahl an reads nicht berücksichtigt.&amp;lt;br&amp;gt;&lt;br /&gt;
* Anders, als bei der Normalisierung mit RPKM wird erst die Genlänge und dann die Sequenziertiefe normalisiert. &lt;br /&gt;
* TPM berechnet das Verhältnis zwischen den Ergebnissen und die Werte in jeder Spalte ergeben 1 Million. &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt;  TPM =  \frac{ c_\text{i}}{L_\text{i}}  \cdot  \dfrac {1}{\sum_\text{n} \dfrac {c_\text{n}}{L_\text{n}}}  \cdot 10^6 &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
'''Parameter:''' &amp;lt;br&amp;gt;&lt;br /&gt;
c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i'&amp;lt;br&amp;gt;&lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in bp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  TPM (A1) =  \frac{ 5}{7000}  \cdot  \dfrac {1}{ \dfrac {5}{7000} +  \dfrac {10}{12000} +  \dfrac {2}{500} + \dfrac {1}{25000}}  \cdot 10^6  = 127834 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! TPM Replikat 1 !! TPM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 127834 || 107383&lt;br /&gt;
|-&lt;br /&gt;
| B || 149139 || 140940&lt;br /&gt;
|-&lt;br /&gt;
| C || 715868 || 751678&lt;br /&gt;
|-&lt;br /&gt;
| D || 7159 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c: Anwendungsbereich===&lt;br /&gt;
RPKM und TPM werden genutzt um die Expression verschiedener Gene, aus der gleichen Probe, einer RNA Sequenzierung miteinander zu vergleichen. Sie sind also Normalisierungsverfahren innerhalb einer Probe.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 3: Normalisierung zwischen Proben==&lt;br /&gt;
==a: Normalisierungsmethode==&lt;br /&gt;
Für die Normalisierung zwischen Proben wird TMM eingesetzt. TMM steht für 'Trimmed mean of M – Values normalization method'.&lt;br /&gt;
==b: Wieso wird die Normalisierung bei RNASeq-Proben angewendet?==&lt;br /&gt;
* Um das relative RNA-Produktionsniveau aus RNASeq-Daten abzuschätzen&lt;br /&gt;
* Es können heterologe Geneigenschaften zwischen 2 Proben auftauchen und eine identische Genexpression, fälschlicherweise, als unterschiedlich erkannt werden&lt;br /&gt;
* Beispiel: Expression zwischen gesunden und kranken Patienten soll auf bestimmte Marker untersucht werden&lt;br /&gt;
&lt;br /&gt;
==c. Normalisierung mit TMM==&lt;br /&gt;
'''1.''' Der Gewichtungsfaktor für das Expressionsverhältnis für Gen 'g' zwischen Probe 'k' ' und 'k' wird bestimmt. Dabei werden kleinere Werte verstärkt und große abgeschwächt. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} =  \frac{ N_\text{k} - Y_\text{gk}}{N_\text{k} \cdot Y_\text{gk}}  +  \frac{ N_\text{k`} - Y_\text{gk`}}{N_\text{k`} \cdot Y_\text{gk`}} &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''2.''' Der Mittelwert aller Expressionsverhältnisse wird berechnet. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = log_2  \dfrac { \dfrac {Y_\text{gk}}{N_\text{k}}}{ \dfrac {Y_\text{gk`}}{N_\text{k`}}}  &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''3.''' Die gewichteten Mittelwerte aller Expressionsverhältnisse werden berechnet. Einsetzen der in 1. und 2. ermittelten Werte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;math&amp;gt; TMM = 2^{log_2 (TMM_\text{k}^\text{k`})} &amp;lt;/math&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; log_2 (TMM_\text{k}^\text{k`}) =  \frac{ \underset {g \in G}{\sum}   W_\text{gk}^\text{k´} \cdot M_\text{gk}^\text{k´}} { \sum_{g \in G} W_\text{gk}^\text{k´}} &amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Mittelwerte aller Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Gewichtungsfaktor der Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
G = Set aller Gene&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Bedingungen für dieses Verfahren:''' &amp;lt;br&amp;gt;&lt;br /&gt;
* Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; , Y&amp;lt;sub&amp;gt;gk'&amp;lt;/sub&amp;gt; &amp;gt; 0&lt;br /&gt;
* Die oberen und unteren 30 % der &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} &amp;lt;/math&amp;gt; Werte werden nicht berücksichtigt&lt;br /&gt;
* Die 5 % am höchsten und niedrigsten exprimierten Gene werden nicht berücksichtigt&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6_Normalisierungen&amp;diff=959</id>
		<title>6 Normalisierungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6_Normalisierungen&amp;diff=959"/>
		<updated>2022-06-01T11:24:17Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* RPKM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
=Normalisierungen=&lt;br /&gt;
Unter Normalisierung versteht man in der Biologie die Verringerung von Verzerrungen innerhalb eines Datensatzes. Systematische Verzerrungen sind z.B. verschiedene Durchführungsrunden, unterschiedliche Bedingungen, Laborausstattung, Experimentatoren ect.&lt;br /&gt;
Auch die heterologe Geneigenschaften können zu unterschiedlichen Ergebnissen bei eigentlich gleicher Genexpression führen, wie z.B. Genlänge.&lt;br /&gt;
Normalisierungen der RNASeq-Daten sind deshalb notwendig, um diese vergleichen. zu können und die tatsächliche Genexpression quantifizieren zu können. &lt;br /&gt;
&lt;br /&gt;
==RPKM==&lt;br /&gt;
RPKM steht für 'Reads per kilobase of transcript per Million mapped reads' und ist eine Normalisierungsmethode für Expressionsstärken. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; RPKM =  \frac{ c_\text{i}}{L_\text{i} \cdot N} *10^6&amp;lt;/math&amp;gt; || c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i' &lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in kbp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;   \frac{ c_\text{i}}{L_\text{i}} &amp;lt;/math&amp;gt;  → Normalisierung der Genlänge &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt; L_\text{i} \cdot N &amp;lt;/math&amp;gt; → Normalisierung der Sequenziertiefe &lt;br /&gt;
Je höher der RPKM-Wert ist, desto höher ist die Genexpression. &amp;lt;br&amp;gt;&lt;br /&gt;
RPKM-Werte können gut zum Vergleich der Genexpressionen innerhalb einer Probe genutzt werden, jedoch sind sie nicht dafür geeignet mehrere Experimente bzw. Proben miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel:'''&lt;br /&gt;
&lt;br /&gt;
[[File:Beispiel Probe.png|Beispiel Probe]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; N=6*10^6 reads &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (A) =  \frac{12}{0,6 kbp \cdot 6} * 10^6 = 3,33 \cdot 10^{6}  &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (B) =  \frac{24}{1,1 kbp \cdot 6} * 10^6 = 3,64  \cdot 10^{6} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (C) =  \frac{11}{1,4 kbp \cdot 6} * 10^6= 1,31  \cdot 10^{6} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch die Normalisierung der Expressionsstärken können diese nun miteinander vergleichen werden.In diesem Beispiel wird Gen B am stärksten exprimiert und Gen C am schwächsten.&lt;br /&gt;
&lt;br /&gt;
==TPM==&lt;br /&gt;
TPM steht für 'Transcripts per Million' und ist eine Normalisierungsmethode für Expressionsstärken. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;  TPM =  \frac{ c_\text{i}}{L_\text{i}}  \cdot  \dfrac {1}{\sum_\text{n} \dfrac {c_\text{n}}{L_\text{n}}}  \cdot 10^6 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt; || c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i'&amp;lt;br&amp;gt;&lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in bp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen&lt;br /&gt;
|} &lt;br /&gt;
Wenn 1 Millionen Transkripte sequenziert würden, wäre TPM&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; die Anzahl an Transkripten des Types 'i'. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel:''' &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Beispiel Probe.png|Beispiel Probe]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (A) =  \frac{ 12}{600}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 402614 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (B) =  \frac{ 24}{1100}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 439216 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (C) =  \frac{ 11}{1400}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 158170 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach der Normalisierung ist ein Vergleich der Genexpressionen möglich. Das Ergebnis gibt an, wie viele Transkripte der Gene entstehen würden, wenn 1 Millionen Transkripte sequenziert werden würden. So würde man z.B. für Gen B 429216 Transkripte erhalten und für Gen C 158170 Transkripte, somit wird Gen B stärker exprimiert, als Gen C. Die Summe der reads ergibt 1 Million.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Probleme von RPKM und TPM:'''&lt;br /&gt;
&lt;br /&gt;
Die beiden Methoden sind nur gut geeignet, um Expressionswerte bzw. Expressionslevel innerhalb einer Probe zu vergleichen.Von sehr heterologen Expressionsprofilen zwischen zwei Proben können identische Genexpressionen fälschlicherweise als unterschiedlich erkannt werden.&lt;br /&gt;
&lt;br /&gt;
Lösung: TMM als Normalisierungsmethode zwischen Proben&lt;br /&gt;
&lt;br /&gt;
==TMM==&lt;br /&gt;
TMM steht für 'Trimmed mean of M-values normalization method'.&amp;lt;br&amp;gt;&lt;br /&gt;
*Gesamtexpressionsstärke pro Probe wird bestimmt, um einzelne Genexpressionen zu bestimmen. &lt;br /&gt;
*Das Expressionsverhältnis zwischen zwei Bedingungen für ein Gen 'g' wird bestimmt.&lt;br /&gt;
*Genexpressionen von zwei Proben mit unterschiedlichen Bedingungen (z.B. krank und gesund) können miteinander verglichen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1.''' Bestimmung des '''Gewichtungsfaktors''' für das Expressionsverhältnis für Gen 'g' zwischen Probe 'k' ' und 'k'. Dabei werden kleinere Werte verstärkt und große abgeschwächt. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} =  \frac{ N_\text{k} - Y_\text{gk}}{N_\text{k} \cdot Y_\text{gk}}  +  \frac{ N_\text{k`} - Y_\text{gk`}}{N_\text{k`} \cdot Y_\text{gk`}} &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Mittelwert aller Expressionsverhältnisse'''  wird berechnet. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = log_2  \dfrac { \dfrac {Y_\text{gk}}{N_\text{k}}}{ \dfrac {Y_\text{gk`}}{N_\text{k`}}}  &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Gewichtete Mittelwerte aller Expressionsverhältnisse''' können berechnet werden. Einsetzen der in 1. und 2. ermittelten Werte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;math&amp;gt; TMM = 2^{log_2 (TMM_\text{k}^\text{k`})} &amp;lt;/math&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gesamt:''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; log_2 (TMM_\text{k}^\text{k`}) =  \frac{ \underset {g \in G}{\sum}   W_\text{gk}^\text{k´} \cdot M_\text{gk}^\text{k´}} { \sum_{g \in G} W_\text{gk}^\text{k´}} &amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Mittelwerte aller Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Gewichtungsfaktor der Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
G = Set aller Gene&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bedingungen für dieses Verfahren:''' &amp;lt;br&amp;gt;&lt;br /&gt;
* Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; , Y&amp;lt;sub&amp;gt;gk'&amp;lt;/sub&amp;gt; &amp;gt; 0&lt;br /&gt;
* Die oberen und unteren 30 % der &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} &amp;lt;/math&amp;gt; Werte werden nicht berücksichtigt&lt;br /&gt;
* Die 5 % am höchsten und niedrigsten exprimierten Gene werden nicht berücksichtigt&lt;br /&gt;
&lt;br /&gt;
== Beispielrechnung ==&lt;br /&gt;
 Gen       Zustand 1[bp]         Zustand 2[bp]&lt;br /&gt;
 A         200                   600&lt;br /&gt;
 B         600                   0 &lt;br /&gt;
 C         800                   960&lt;br /&gt;
 D         400                   480&lt;br /&gt;
 &lt;br /&gt;
 Summe     2000                  1680&lt;br /&gt;
&lt;br /&gt;
 Folgende Dinge gelten nun:&lt;br /&gt;
 * TMM braucht immer einen Referenzwert (hier: Zustand 1); Wenn man mehrere Proben hätte, könnte man diese alle an Zustand 1 messen.&lt;br /&gt;
&lt;br /&gt;
 * Zuerst normalisiert man die Counts innerhalb der Probe&lt;br /&gt;
     Ya/N                         Yb/N&amp;lt;br&amp;gt;&lt;br /&gt;
 A   &amp;lt;math&amp;gt;\frac{200}{2000}=0,1&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{240}{1680}=0,143&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt;\frac{600}{2000}=0,3&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{0}{1680}=0&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt;\frac{800}{2000}=0,4&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{960}{1680}=0,571&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt;\frac{400}{2000}=0,2&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{2480}{1680}=0,286&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 * Mittelwert der Expressionsverhältnisse&lt;br /&gt;
          Ma/b                         &lt;br /&gt;
 A   &amp;lt;math&amp;gt;log_{2} \frac{0,143}{0,1}=0,516&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt;log_{2} \frac{0}{0,3}= -Inf &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt;log_{2} \frac{0,571}{0,4}=0,513&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt;log_{2} \frac{0,286}{0,2}=0,516&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 *'''kleiner Praxistipp von eurem Admin''': &amp;lt;math&amp;gt;log_{2}&amp;lt;/math&amp;gt; ist der Logarithmus von 2, Es ist nicht der natürliche log, es ist nicht ln, es ist nichts mit eulerscher Zahl oder was eure Taschenrechner sonst noch so hergeben. Also sucht eine Funktion, in der ihr die Basis des log eintragen könnt und gebt dort eine 2 ein. &lt;br /&gt;
&lt;br /&gt;
 *Nun kommt der Gewichtungsfaktor ins Spiel&lt;br /&gt;
                Wa/b&lt;br /&gt;
 A   &amp;lt;math&amp;gt; \frac{1680-240}{1680*240} + \frac{2000-200}{2000*200}=0,081&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt; \frac{1680-0}{1680*0} + \frac{2000-600}{2000*600}= -Inf &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt; \frac{1680-960}{1680*960} + \frac{2000-800}{2000*800}=0,0012&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt; \frac{1680-480}{1680*480} + \frac{2000-400}{2000*400}=0,0035&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 '''Summe der Gewichtung 0,0128'''&lt;br /&gt;
&lt;br /&gt;
 *Nun werden die Mittelwerte der Expressionsverhältnisse gewichtet (durch den Gewichtungsfaktor)&lt;br /&gt;
 &lt;br /&gt;
 A   0,516 * 0,081  = 0,0042&lt;br /&gt;
 B   -&lt;br /&gt;
 C   0,513 * 0,0012 = 0,0006&lt;br /&gt;
 D   0,516 * 0,0018 = 0,0018&lt;br /&gt;
 Summe                0,0066&lt;br /&gt;
&lt;br /&gt;
 Nun wird TMM berechnet:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{\text{Summe der gewichteten Mittelwerte der Expressionsverhältnisse}}{\text{Summe Gewichtungsfaktoren}}=log_{2}(TMM)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{0,0066}{0,0128}=0,51=log_{2}(TMM)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 * Jetzt noch die Formel umsetzen:&lt;br /&gt;
 &amp;lt;math&amp;gt;log_{2}(TMM)= x&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2^{x} = TMM &amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2^{0,51} = 1,4296 &amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=852</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=852"/>
		<updated>2021-08-01T10:56:57Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Ansprechpartner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bioinformatik Grundkurs =&lt;br /&gt;
&lt;br /&gt;
 [[Q &amp;amp; A Bioinformatik Wiki]]&lt;br /&gt;
&lt;br /&gt;
'''Vorlesungen''':&lt;br /&gt;
   [[1_Datenbanken|1.Datenbanken]] | [[2_Transkriptom RNA Seq 1|2.Transkriptom RNA Seq 1]] | [[3_Alignments|3.Alignments]] | [[4_Burrows-Wheeler|4.Burrows-Wheeler]] | [[5_Transkriptom RNA Seq 2|5.Transkriptom RNA Seq 2]] | [[6_Normalisierungen|6.Normalisierungen]] | [[7_Multiples_Testen|7.Multiples_Testen]] | [[8_Galaxy|8.Galaxy]] | [[9_Biomarker|9.Biomarker]] | [[10_BLAST|10.BLAST]] | [[11_BLAST_II|11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Übungen''':&lt;br /&gt;
   [[1.Datenbanken]] | [[2.Transkriptom RNA Seq 1]] | [[3.Alignments]] | [[4.Burrows-Wheeler]] | [[5.Transkriptom RNA Seq 2]] | [[6.Normalisierungen]] | [[7.Hypothesentests]] | [[8.Galaxy ]] | [[9.Biomarker]] | [[10.BLAST]] | [[11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Python''':&lt;br /&gt;
   [[1.Einführung]] | [[2.Datentypen und Datenstrukturen]] | [[3.Befehle]] | [[4.Übungsaufgaben]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Glossar]]&lt;br /&gt;
&lt;br /&gt;
== Ansprechpartner ==&lt;br /&gt;
Prof. Dr. Karsten Hiller (karsten.hiller@tu-braunschweig.de)&lt;br /&gt;
&lt;br /&gt;
Wiki Technik:&lt;br /&gt;
* [[User:Nko|Nils Koschnitzki]]&lt;br /&gt;
&lt;br /&gt;
Inhalt:&lt;br /&gt;
&lt;br /&gt;
SoSe 21:&lt;br /&gt;
* Simon Klute&lt;br /&gt;
&lt;br /&gt;
WiSe 20/21:&lt;br /&gt;
* [[User:Mka|Michelle Khalil]]&lt;br /&gt;
&lt;br /&gt;
SoSe 20:&lt;br /&gt;
* [[User:Pge|Philip Gemke]]&lt;br /&gt;
&lt;br /&gt;
SoSe 19:&lt;br /&gt;
* [[User:Vero|Veronika Martin]]&lt;br /&gt;
* [[User:Patrick Melichar|Patrick Melichar]]&lt;br /&gt;
* [[User:L.motzko‎|Lukas Motzko]]&lt;br /&gt;
&lt;br /&gt;
== Semester Archive ==&lt;br /&gt;
''None''&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=851</id>
		<title>3.Befehle</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=851"/>
		<updated>2021-08-01T10:49:09Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* while-Schleife */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''print''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 print()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 print(“hello“)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 hello &lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* der entsprechende Inhalt des ''print''-Befehls wird in der Console ausgegeben &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die runden Klammern dienen dazu den Anfang und das Ende der Ausgabe zu markieren&lt;br /&gt;
* Wörter, bei denen es sich nicht um einen Variablennamen handelt, müssen in Anführungszeichen gesetzt werden&lt;br /&gt;
* geschieht das nicht wird ein Syntaxfehler angezeigt (s.Beispiel_2)&lt;br /&gt;
* int und floats werden ohne Anführungszeichen eingegeben&lt;br /&gt;
&lt;br /&gt;
 #Beipsiel_2:&lt;br /&gt;
 print(falsch)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 NameError: name 'falsch' is not defined&lt;br /&gt;
&lt;br /&gt;
* Python geht davon aus das es sich bei „falsch“ um eine Variable handelt und möchte den Wert dieser Variablen ausgeben. Es wurde aber keine Variable mit den Namen „falsch“ definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ''type''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 type()&amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel_1: &lt;br /&gt;
 a=&amp;quot;abc&amp;quot;&lt;br /&gt;
 d=True&lt;br /&gt;
 print(type(a))&lt;br /&gt;
 print(type(1))&lt;br /&gt;
 print(type(1.0)&lt;br /&gt;
 print(type(d))&lt;br /&gt;
 &lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 print(type(buch_1))&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 &amp;lt;class 'str'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'int'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'float'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'bool'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'dict'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Funktion===&lt;br /&gt;
* mit dem ''type''-Befehl lässt sich der Datentyp bestimmen&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* um den Datentyp zu bestimmen wird dieser in die Klammern des ''type''-Befehls geschrieben &lt;br /&gt;
* dabei kann es sich direkt um den Datentyp handeln oder einen Varibalennamen &lt;br /&gt;
* auch hier ist der print Befehl wieder notwendig um das Ergebnis ausgeben zu lassen &lt;br /&gt;
* ohne den print -Befehl wird der type -Befehl zwar ausgeführt, aber nicht in der Console ausgegeben&lt;br /&gt;
&lt;br /&gt;
== ''input'' -Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 eingabe=input()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 zahl=input()&lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 3 #eingegebene Zahl des Nutzers im Eingabefeld  &lt;br /&gt;
 3 #durch print-Befehl ausgegebene Zahl&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
* ermöglicht dem Nutzer die Interaktion mit dem Programm &lt;br /&gt;
* so kann z.B. ein Rechenprogramm mit jeder beliebigen vom Nutzer eingegebenen Zahl rechnen und nicht nur mit vorab programmierten Zahlen &lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;input&amp;quot; folgt eine Klammer, die bei Ausführung des Programms ein Eingabefeld in der Console erzeugt&lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der entsprechende Text einfach in die Klammer eingegeben werden (s. Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
* die Eingabe des Nutzers wird meist durch eine Variable definiert, d.h.: &lt;br /&gt;
 eingabe=input()&lt;br /&gt;
* da der einzutragende Wert bei der Programmierung nicht bekannt ist, kann so „stellvertretend“ mit der Variablen programmiert werden &lt;br /&gt;
* s. Beispiel_3, bei der die Rechenoperation „*2“ mit der Variablen „zahl“ programmiert wird, welche später durch die Eingabe des Nutzers einen Zahlenwert erhält&lt;br /&gt;
* der Wert der Variablen wird also erst festgelegt, während das Programm läuft &lt;br /&gt;
* in der Console entsteht durch den ''input-Befehl'' ein „Eingabefeld“ (nicht direkt sichtbar) in das der Nutzer einen Wert (in Beispiel_1 eine Zahl) eintrage kann &lt;br /&gt;
* ACHTUNG!: jede Eingabe wird durch den input-Befehl automatisch als string gespeichert &lt;br /&gt;
* in Bespiel_3 wird die 3 in string-Form abgespeichert &lt;br /&gt;
* die Rechenoperation wird nicht als Multiplikation mit 2 verstanden sondern als Wiederholung des strings &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_3: &lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 33&lt;br /&gt;
&lt;br /&gt;
* der string 3 wird wiederholt und es kommt 33 statt 6 heraus &lt;br /&gt;
* Lösung: man kann den Datentyp des &amp;quot;inputs&amp;quot; vorab definieren:&lt;br /&gt;
 int(input()) , float(input())&lt;br /&gt;
* weiß man vorab nicht um welchen Datentypen es sich handelt ist der eval()-Befehl zu empfehlen (s. Beispiel 4) , dieser speichert die Eingabe automatisch unter dem passenden Datentypen ab (string, integer, float) &lt;br /&gt;
* hier ist allerdings zu beachten, dass in der Konsole, ein string wieder in Anführungszeichen gesetzt werden muss&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_4: &lt;br /&gt;
 zahl=eval(input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;))&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 6&amp;lt;br&amp;gt;&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: 2.4&lt;br /&gt;
 4.8&amp;lt;br&amp;gt;&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: &amp;quot;a&amp;quot;&lt;br /&gt;
 aa&lt;br /&gt;
&lt;br /&gt;
== ''while''-Schleife ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 while Bedingung:&lt;br /&gt;
     Operation() &amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel:&lt;br /&gt;
 n=1&lt;br /&gt;
 while n&amp;lt;10: &lt;br /&gt;
     print(n)&lt;br /&gt;
     n=n+1&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* bestimmte Operationen werden automatisch wiederholt &lt;br /&gt;
* erspart viel Programmierarbeit, da nicht alle Operationen einzeln programmiert werden müssen &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die Schleife wird mit dem Ausdruck &amp;quot;while&amp;quot; begonnen &lt;br /&gt;
* darauf folgt eine Bedingung, die überprüft wird (z.B. n&amp;lt;10) gefolgt von einem Doppelpunkt&lt;br /&gt;
* in den nächsten Zeilen folgen die Operationen, die innerhalb der Schleife durchgeführt werden sollen &lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist &lt;br /&gt;
* die ''while''-Schleife sollte so programmiert sein, dass sie irgendwann zu einem Ende kommt und nicht endlos weiterläuft, d.h. die zu überprüfende Bedingung darf irgendwann nicht mehr zutreffen &lt;br /&gt;
* --&amp;gt; ansonsten kommt es zu einer endlosen Schleife  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ====&lt;br /&gt;
* am besten wird die Funktion und die Syntax einer Schleife klar, wenn man sie Schritt für Schritt durchgeht, hier am Beispiel_1: &lt;br /&gt;
* '''ersten Zeile: der Variablen n wir der Wert 1 zugeordnet''' &lt;br /&gt;
* '''zweite Zeile: so lange n kleiner als 10 ist werden folgende Operationen durchgeführt''' &lt;br /&gt;
*(hier wird die Bedingung überprüft, trifft sie zu werden die Operationen der Schleife durchgeführt)  &lt;br /&gt;
* '''dritte Zeile: gebe den Wert von n aus''' &lt;br /&gt;
* (im ersten Durchlauf beträgt der Wert, wie in der ersten Zeile definiert, den Wert 1) &lt;br /&gt;
* '''vierte Zeile: definiere die Variable n neu, indem du den Wert von n nimmst und 1 addierst'''&lt;br /&gt;
* (n wird neu definiert als der alte Wert von n plus eins, also 1+1, damit ist n jetzt 2) &lt;br /&gt;
* sobald die Operationen der Schleife durchgeführt sind, beginnt sie wieder von Neuem, also mit der Überprüfung der Bedingung &lt;br /&gt;
* so wird der Wert n immer größer&lt;br /&gt;
* erst wenn n=10, trifft die Bedingung nicht zu, die Operationen der Schleife werden nicht durchgeführt &lt;br /&gt;
* finden sich weiter Programmzeilen unterhalb der Schleife, die nicht Teil der Schleife sind, werden diese Programmzeilen erst nach Beendigung der Schleife ausgeführt&lt;br /&gt;
[[File:Flow diagram while_schleife.png|200px|thumb|center|flowchart ''while''-Schleife]]&lt;br /&gt;
&lt;br /&gt;
== ''for''- Schleife ==&lt;br /&gt;
 &lt;br /&gt;
 #Befehl: &lt;br /&gt;
 for element in sammlung: &lt;br /&gt;
 	befehl()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 liste=[“Python”, 1, 4.5, True]&lt;br /&gt;
 &lt;br /&gt;
 for element in liste: &lt;br /&gt;
 	print(element)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Python&lt;br /&gt;
 1&lt;br /&gt;
 4.5&lt;br /&gt;
 True&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* erlaubt wie die ‘‘while‘‘- Schleife die automatische Wiederholung von Befehlen &lt;br /&gt;
* bietet im Gegensatz zur ‘‘while‘‘-Schleife einige Vorteile (die Funktionen der for-schleife wären zwar auch mit einer while schleifen lösbar, sind aber mit for schleifen deutlich einfacher zu lösen) &lt;br /&gt;
* die ''for''- Schleife eignet sich besonders gut für die einzelne Ausgabe der Elemente von Dictionaries &lt;br /&gt;
* sowie die Durchführung von Befehlen, die für jedes Element einer Sequenz (z.B. str) oder Sammlung (z.B. Liste) einmal durchgeführt werden soll&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;for&amp;quot; kommt der  Name der Variablen, dieser steht stellvertretend für jedes Element einer Sammlung oder Sequenz&lt;br /&gt;
* beim ''input''-Befehl war es vorteilhaft die beim Programmieren noch nicht bekannte (weil erst später durch den Nutzer erfolgende) Eingabe bereits im Programmcode stellvertretende durch eine Variable zu definieren&lt;br /&gt;
* so konnte z.B. eine Rechnungen mit einer nicht bekannten Zahl programmiert werden &lt;br /&gt;
* das gleiche Prinzip gilt auch für die Variable der &amp;quot;for&amp;quot;-Schleife (diese kann natürlich jeden beliebigen Namen annehmen)  &lt;br /&gt;
* im Beispiel_1 steht die Variable &amp;quot;element&amp;quot; für die Elemente der Liste namens &amp;quot;liste&amp;quot;&lt;br /&gt;
* die Variable &amp;quot;element&amp;quot; steht zwar für alle Elemente der Liste, also “Python”, 1, 4.5 und True, aber nicht gleichzeitig &lt;br /&gt;
* im ersten Durchlauf der Schleife steht sie für das erste Element der Liste (&amp;quot;Python&amp;quot;), nun werden die Befehle der Schleife ausgeführt:&lt;br /&gt;
* print(element) wird im ersten Durchlauf also zu print(&amp;quot;Python&amp;quot;) &lt;br /&gt;
* im zweiten Durchlauf steht die Variable für das zweite Element (1), print(element) wird im zweiten Durchlauf also zu print(1) usw.&lt;br /&gt;
* der  darauf folgende Ausdruck &amp;quot;in&amp;quot; dient dazu die Liste, das Dictionary, den String etc. anzugeben, mit dessen Elemente die Schleife durchgeführt werden soll&lt;br /&gt;
* dementsprechend folgt darauf der Namen einer Liste, eines Dictionaries oder eines Strings (ein String kann durch eine Variable gespeichert sein oder direkt angegeben werden), daraufhin folgt ein Doppelpunkt&lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ==== &lt;br /&gt;
&lt;br /&gt;
* es wird überprüft ob es ein Element gibt, wessen Wert die Variabel annehmen kann &lt;br /&gt;
* trifft das zu laufen die Befehl der Schleife ab, wobei die Variable immer für den entsprechenden Wert des Elements steht &lt;br /&gt;
* gibt es keine Elemente mehr, dessen Wert noch nicht angenommen wurde, bricht die Schleife ab&lt;br /&gt;
* somit läuft eine for-Schleife immer für jedes Element einmal ab und läuft so häufig ab wie es Elemente gibt (ohne Modifikationen s. unten)&lt;br /&gt;
&lt;br /&gt;
[[File:flowchart ''for''-Schleife.png|200px|thumb|center|flowchart ''for''-Schleife]]&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=850</id>
		<title>3.Befehle</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=850"/>
		<updated>2021-08-01T10:48:40Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''print''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 print()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 print(“hello“)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 hello &lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* der entsprechende Inhalt des ''print''-Befehls wird in der Console ausgegeben &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die runden Klammern dienen dazu den Anfang und das Ende der Ausgabe zu markieren&lt;br /&gt;
* Wörter, bei denen es sich nicht um einen Variablennamen handelt, müssen in Anführungszeichen gesetzt werden&lt;br /&gt;
* geschieht das nicht wird ein Syntaxfehler angezeigt (s.Beispiel_2)&lt;br /&gt;
* int und floats werden ohne Anführungszeichen eingegeben&lt;br /&gt;
&lt;br /&gt;
 #Beipsiel_2:&lt;br /&gt;
 print(falsch)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 NameError: name 'falsch' is not defined&lt;br /&gt;
&lt;br /&gt;
* Python geht davon aus das es sich bei „falsch“ um eine Variable handelt und möchte den Wert dieser Variablen ausgeben. Es wurde aber keine Variable mit den Namen „falsch“ definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ''type''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 type()&amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel_1: &lt;br /&gt;
 a=&amp;quot;abc&amp;quot;&lt;br /&gt;
 d=True&lt;br /&gt;
 print(type(a))&lt;br /&gt;
 print(type(1))&lt;br /&gt;
 print(type(1.0)&lt;br /&gt;
 print(type(d))&lt;br /&gt;
 &lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 print(type(buch_1))&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 &amp;lt;class 'str'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'int'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'float'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'bool'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'dict'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Funktion===&lt;br /&gt;
* mit dem ''type''-Befehl lässt sich der Datentyp bestimmen&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* um den Datentyp zu bestimmen wird dieser in die Klammern des ''type''-Befehls geschrieben &lt;br /&gt;
* dabei kann es sich direkt um den Datentyp handeln oder einen Varibalennamen &lt;br /&gt;
* auch hier ist der print Befehl wieder notwendig um das Ergebnis ausgeben zu lassen &lt;br /&gt;
* ohne den print -Befehl wird der type -Befehl zwar ausgeführt, aber nicht in der Console ausgegeben&lt;br /&gt;
&lt;br /&gt;
== ''input'' -Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 eingabe=input()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 zahl=input()&lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 3 #eingegebene Zahl des Nutzers im Eingabefeld  &lt;br /&gt;
 3 #durch print-Befehl ausgegebene Zahl&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
* ermöglicht dem Nutzer die Interaktion mit dem Programm &lt;br /&gt;
* so kann z.B. ein Rechenprogramm mit jeder beliebigen vom Nutzer eingegebenen Zahl rechnen und nicht nur mit vorab programmierten Zahlen &lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;input&amp;quot; folgt eine Klammer, die bei Ausführung des Programms ein Eingabefeld in der Console erzeugt&lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der entsprechende Text einfach in die Klammer eingegeben werden (s. Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
* die Eingabe des Nutzers wird meist durch eine Variable definiert, d.h.: &lt;br /&gt;
 eingabe=input()&lt;br /&gt;
* da der einzutragende Wert bei der Programmierung nicht bekannt ist, kann so „stellvertretend“ mit der Variablen programmiert werden &lt;br /&gt;
* s. Beispiel_3, bei der die Rechenoperation „*2“ mit der Variablen „zahl“ programmiert wird, welche später durch die Eingabe des Nutzers einen Zahlenwert erhält&lt;br /&gt;
* der Wert der Variablen wird also erst festgelegt, während das Programm läuft &lt;br /&gt;
* in der Console entsteht durch den ''input-Befehl'' ein „Eingabefeld“ (nicht direkt sichtbar) in das der Nutzer einen Wert (in Beispiel_1 eine Zahl) eintrage kann &lt;br /&gt;
* ACHTUNG!: jede Eingabe wird durch den input-Befehl automatisch als string gespeichert &lt;br /&gt;
* in Bespiel_3 wird die 3 in string-Form abgespeichert &lt;br /&gt;
* die Rechenoperation wird nicht als Multiplikation mit 2 verstanden sondern als Wiederholung des strings &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_3: &lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 33&lt;br /&gt;
&lt;br /&gt;
* der string 3 wird wiederholt und es kommt 33 statt 6 heraus &lt;br /&gt;
* Lösung: man kann den Datentyp des &amp;quot;inputs&amp;quot; vorab definieren:&lt;br /&gt;
 int(input()) , float(input())&lt;br /&gt;
* weiß man vorab nicht um welchen Datentypen es sich handelt ist der eval()-Befehl zu empfehlen (s. Beispiel 4) , dieser speichert die Eingabe automatisch unter dem passenden Datentypen ab (string, integer, float) &lt;br /&gt;
* hier ist allerdings zu beachten, dass in der Konsole, ein string wieder in Anführungszeichen gesetzt werden muss&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_4: &lt;br /&gt;
 zahl=eval(input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;))&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 6&amp;lt;br&amp;gt;&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: 2.4&lt;br /&gt;
 4.8&amp;lt;br&amp;gt;&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: &amp;quot;a&amp;quot;&lt;br /&gt;
 aa&lt;br /&gt;
&lt;br /&gt;
== ''while''-Schleife ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 while Bedingung:&lt;br /&gt;
     Operation() &lt;br /&gt;
&lt;br /&gt;
 #Beispiel:&lt;br /&gt;
 n=1&lt;br /&gt;
 while n&amp;lt;10: &lt;br /&gt;
     print(n)&lt;br /&gt;
     n=n+1&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* bestimmte Operationen werden automatisch wiederholt &lt;br /&gt;
* erspart viel Programmierarbeit, da nicht alle Operationen einzeln programmiert werden müssen &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die Schleife wird mit dem Ausdruck &amp;quot;while&amp;quot; begonnen &lt;br /&gt;
* darauf folgt eine Bedingung, die überprüft wird (z.B. n&amp;lt;10) gefolgt von einem Doppelpunkt&lt;br /&gt;
* in den nächsten Zeilen folgen die Operationen, die innerhalb der Schleife durchgeführt werden sollen &lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist &lt;br /&gt;
* die ''while''-Schleife sollte so programmiert sein, dass sie irgendwann zu einem Ende kommt und nicht endlos weiterläuft, d.h. die zu überprüfende Bedingung darf irgendwann nicht mehr zutreffen &lt;br /&gt;
* --&amp;gt; ansonsten kommt es zu einer endlosen Schleife  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ====&lt;br /&gt;
* am besten wird die Funktion und die Syntax einer Schleife klar, wenn man sie Schritt für Schritt durchgeht, hier am Beispiel_1: &lt;br /&gt;
* '''ersten Zeile: der Variablen n wir der Wert 1 zugeordnet''' &lt;br /&gt;
* '''zweite Zeile: so lange n kleiner als 10 ist werden folgende Operationen durchgeführt''' &lt;br /&gt;
*(hier wird die Bedingung überprüft, trifft sie zu werden die Operationen der Schleife durchgeführt)  &lt;br /&gt;
* '''dritte Zeile: gebe den Wert von n aus''' &lt;br /&gt;
* (im ersten Durchlauf beträgt der Wert, wie in der ersten Zeile definiert, den Wert 1) &lt;br /&gt;
* '''vierte Zeile: definiere die Variable n neu, indem du den Wert von n nimmst und 1 addierst'''&lt;br /&gt;
* (n wird neu definiert als der alte Wert von n plus eins, also 1+1, damit ist n jetzt 2) &lt;br /&gt;
* sobald die Operationen der Schleife durchgeführt sind, beginnt sie wieder von Neuem, also mit der Überprüfung der Bedingung &lt;br /&gt;
* so wird der Wert n immer größer&lt;br /&gt;
* erst wenn n=10, trifft die Bedingung nicht zu, die Operationen der Schleife werden nicht durchgeführt &lt;br /&gt;
* finden sich weiter Programmzeilen unterhalb der Schleife, die nicht Teil der Schleife sind, werden diese Programmzeilen erst nach Beendigung der Schleife ausgeführt&lt;br /&gt;
[[File:Flow diagram while_schleife.png|200px|thumb|center|flowchart ''while''-Schleife]]&lt;br /&gt;
&lt;br /&gt;
== ''for''- Schleife ==&lt;br /&gt;
 &lt;br /&gt;
 #Befehl: &lt;br /&gt;
 for element in sammlung: &lt;br /&gt;
 	befehl()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 liste=[“Python”, 1, 4.5, True]&lt;br /&gt;
 &lt;br /&gt;
 for element in liste: &lt;br /&gt;
 	print(element)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Python&lt;br /&gt;
 1&lt;br /&gt;
 4.5&lt;br /&gt;
 True&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* erlaubt wie die ‘‘while‘‘- Schleife die automatische Wiederholung von Befehlen &lt;br /&gt;
* bietet im Gegensatz zur ‘‘while‘‘-Schleife einige Vorteile (die Funktionen der for-schleife wären zwar auch mit einer while schleifen lösbar, sind aber mit for schleifen deutlich einfacher zu lösen) &lt;br /&gt;
* die ''for''- Schleife eignet sich besonders gut für die einzelne Ausgabe der Elemente von Dictionaries &lt;br /&gt;
* sowie die Durchführung von Befehlen, die für jedes Element einer Sequenz (z.B. str) oder Sammlung (z.B. Liste) einmal durchgeführt werden soll&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;for&amp;quot; kommt der  Name der Variablen, dieser steht stellvertretend für jedes Element einer Sammlung oder Sequenz&lt;br /&gt;
* beim ''input''-Befehl war es vorteilhaft die beim Programmieren noch nicht bekannte (weil erst später durch den Nutzer erfolgende) Eingabe bereits im Programmcode stellvertretende durch eine Variable zu definieren&lt;br /&gt;
* so konnte z.B. eine Rechnungen mit einer nicht bekannten Zahl programmiert werden &lt;br /&gt;
* das gleiche Prinzip gilt auch für die Variable der &amp;quot;for&amp;quot;-Schleife (diese kann natürlich jeden beliebigen Namen annehmen)  &lt;br /&gt;
* im Beispiel_1 steht die Variable &amp;quot;element&amp;quot; für die Elemente der Liste namens &amp;quot;liste&amp;quot;&lt;br /&gt;
* die Variable &amp;quot;element&amp;quot; steht zwar für alle Elemente der Liste, also “Python”, 1, 4.5 und True, aber nicht gleichzeitig &lt;br /&gt;
* im ersten Durchlauf der Schleife steht sie für das erste Element der Liste (&amp;quot;Python&amp;quot;), nun werden die Befehle der Schleife ausgeführt:&lt;br /&gt;
* print(element) wird im ersten Durchlauf also zu print(&amp;quot;Python&amp;quot;) &lt;br /&gt;
* im zweiten Durchlauf steht die Variable für das zweite Element (1), print(element) wird im zweiten Durchlauf also zu print(1) usw.&lt;br /&gt;
* der  darauf folgende Ausdruck &amp;quot;in&amp;quot; dient dazu die Liste, das Dictionary, den String etc. anzugeben, mit dessen Elemente die Schleife durchgeführt werden soll&lt;br /&gt;
* dementsprechend folgt darauf der Namen einer Liste, eines Dictionaries oder eines Strings (ein String kann durch eine Variable gespeichert sein oder direkt angegeben werden), daraufhin folgt ein Doppelpunkt&lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ==== &lt;br /&gt;
&lt;br /&gt;
* es wird überprüft ob es ein Element gibt, wessen Wert die Variabel annehmen kann &lt;br /&gt;
* trifft das zu laufen die Befehl der Schleife ab, wobei die Variable immer für den entsprechenden Wert des Elements steht &lt;br /&gt;
* gibt es keine Elemente mehr, dessen Wert noch nicht angenommen wurde, bricht die Schleife ab&lt;br /&gt;
* somit läuft eine for-Schleife immer für jedes Element einmal ab und läuft so häufig ab wie es Elemente gibt (ohne Modifikationen s. unten)&lt;br /&gt;
&lt;br /&gt;
[[File:flowchart ''for''-Schleife.png|200px|thumb|center|flowchart ''for''-Schleife]]&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=849</id>
		<title>3.Befehle</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=849"/>
		<updated>2021-08-01T10:47:37Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''print''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 print()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 print(“hello“)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 hello &lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* der entsprechende Inhalt des ''print''-Befehls wird in der Console ausgegeben &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die runden Klammern dienen dazu den Anfang und das Ende der Ausgabe zu markieren&lt;br /&gt;
* Wörter, bei denen es sich nicht um einen Variablennamen handelt, müssen in Anführungszeichen gesetzt werden&lt;br /&gt;
* geschieht das nicht wird ein Syntaxfehler angezeigt (s.Beispiel_2)&lt;br /&gt;
* int und floats werden ohne Anführungszeichen eingegeben&lt;br /&gt;
&lt;br /&gt;
 #Beipsiel_2:&lt;br /&gt;
 print(falsch)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 NameError: name 'falsch' is not defined&lt;br /&gt;
&lt;br /&gt;
* Python geht davon aus das es sich bei „falsch“ um eine Variable handelt und möchte den Wert dieser Variablen ausgeben. Es wurde aber keine Variable mit den Namen „falsch“ definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ''type''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 type()&amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel_1: &lt;br /&gt;
 a=&amp;quot;abc&amp;quot;&lt;br /&gt;
 d=True&lt;br /&gt;
 print(type(a))&lt;br /&gt;
 print(type(1))&lt;br /&gt;
 print(type(1.0)&lt;br /&gt;
 print(type(d))&lt;br /&gt;
 &lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 print(type(buch_1))&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 &amp;lt;class 'str'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'int'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'float'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'bool'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'dict'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Funktion===&lt;br /&gt;
* mit dem ''type''-Befehl lässt sich der Datentyp bestimmen&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* um den Datentyp zu bestimmen wird dieser in die Klammern des ''type''-Befehls geschrieben &lt;br /&gt;
* dabei kann es sich direkt um den Datentyp handeln oder einen Varibalennamen &lt;br /&gt;
* auch hier ist der print Befehl wieder notwendig um das Ergebnis ausgeben zu lassen &lt;br /&gt;
* ohne den print -Befehl wird der type -Befehl zwar ausgeführt, aber nicht in der Console ausgegeben&lt;br /&gt;
&lt;br /&gt;
== ''input'' -Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 eingabe=input()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 zahl=input()&lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 3 #eingegebene Zahl des Nutzers im Eingabefeld  &lt;br /&gt;
 3 #durch print-Befehl ausgegebene Zahl&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
* ermöglicht dem Nutzer die Interaktion mit dem Programm &lt;br /&gt;
* so kann z.B. ein Rechenprogramm mit jeder beliebigen vom Nutzer eingegebenen Zahl rechnen und nicht nur mit vorab programmierten Zahlen &lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;input&amp;quot; folgt eine Klammer, die bei Ausführung des Programms ein Eingabefeld in der Console erzeugt&lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der entsprechende Text einfach in die Klammer eingegeben werden (s. Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
* die Eingabe des Nutzers wird meist durch eine Variable definiert, d.h.: &lt;br /&gt;
 eingabe=input()&lt;br /&gt;
* da der einzutragende Wert bei der Programmierung nicht bekannt ist, kann so „stellvertretend“ mit der Variablen programmiert werden &lt;br /&gt;
* s. Beispiel_3, bei der die Rechenoperation „*2“ mit der Variablen „zahl“ programmiert wird, welche später durch die Eingabe des Nutzers einen Zahlenwert erhält&lt;br /&gt;
* der Wert der Variablen wird also erst festgelegt, während das Programm läuft &lt;br /&gt;
* in der Console entsteht durch den ''input-Befehl'' ein „Eingabefeld“ (nicht direkt sichtbar) in das der Nutzer einen Wert (in Beispiel_1 eine Zahl) eintrage kann &lt;br /&gt;
* ACHTUNG!: jede Eingabe wird durch den input-Befehl automatisch als string gespeichert &lt;br /&gt;
* in Bespiel_3 wird die 3 in string-Form abgespeichert &lt;br /&gt;
* die Rechenoperation wird nicht als Multiplikation mit 2 verstanden sondern als Wiederholung des strings &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_3: &lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 33&lt;br /&gt;
&lt;br /&gt;
* der string 3 wird wiederholt und es kommt 33 statt 6 heraus &lt;br /&gt;
* Lösung: man kann den Datentyp des &amp;quot;inputs&amp;quot; vorab definieren:&lt;br /&gt;
 int(input()) , float(input())&lt;br /&gt;
* weiß man vorab nicht um welchen Datentypen es sich handelt ist der eval()-Befehl zu empfehlen (s. Beispiel 4) , dieser speichert die Eingabe automatisch unter dem passenden Datentypen ab (string, integer, float) &lt;br /&gt;
* hier ist allerdings zu beachten, dass in der Konsole, ein string wieder in Anführungszeichen gesetzt werden muss&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_4: &lt;br /&gt;
 zahl=eval(input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;))&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 6&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: 2.4&lt;br /&gt;
 4.8&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: &amp;quot;a&amp;quot;&lt;br /&gt;
 aa&lt;br /&gt;
&lt;br /&gt;
== ''while''-Schleife ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 while Bedingung:&lt;br /&gt;
     Operation() &lt;br /&gt;
&lt;br /&gt;
 #Beispiel:&lt;br /&gt;
 n=1&lt;br /&gt;
 while n&amp;lt;10: &lt;br /&gt;
     print(n)&lt;br /&gt;
     n=n+1&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* bestimmte Operationen werden automatisch wiederholt &lt;br /&gt;
* erspart viel Programmierarbeit, da nicht alle Operationen einzeln programmiert werden müssen &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die Schleife wird mit dem Ausdruck &amp;quot;while&amp;quot; begonnen &lt;br /&gt;
* darauf folgt eine Bedingung, die überprüft wird (z.B. n&amp;lt;10) gefolgt von einem Doppelpunkt&lt;br /&gt;
* in den nächsten Zeilen folgen die Operationen, die innerhalb der Schleife durchgeführt werden sollen &lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist &lt;br /&gt;
* die ''while''-Schleife sollte so programmiert sein, dass sie irgendwann zu einem Ende kommt und nicht endlos weiterläuft, d.h. die zu überprüfende Bedingung darf irgendwann nicht mehr zutreffen &lt;br /&gt;
* --&amp;gt; ansonsten kommt es zu einer endlosen Schleife  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ====&lt;br /&gt;
* am besten wird die Funktion und die Syntax einer Schleife klar, wenn man sie Schritt für Schritt durchgeht, hier am Beispiel_1: &lt;br /&gt;
* '''ersten Zeile: der Variablen n wir der Wert 1 zugeordnet''' &lt;br /&gt;
* '''zweite Zeile: so lange n kleiner als 10 ist werden folgende Operationen durchgeführt''' &lt;br /&gt;
*(hier wird die Bedingung überprüft, trifft sie zu werden die Operationen der Schleife durchgeführt)  &lt;br /&gt;
* '''dritte Zeile: gebe den Wert von n aus''' &lt;br /&gt;
* (im ersten Durchlauf beträgt der Wert, wie in der ersten Zeile definiert, den Wert 1) &lt;br /&gt;
* '''vierte Zeile: definiere die Variable n neu, indem du den Wert von n nimmst und 1 addierst'''&lt;br /&gt;
* (n wird neu definiert als der alte Wert von n plus eins, also 1+1, damit ist n jetzt 2) &lt;br /&gt;
* sobald die Operationen der Schleife durchgeführt sind, beginnt sie wieder von Neuem, also mit der Überprüfung der Bedingung &lt;br /&gt;
* so wird der Wert n immer größer&lt;br /&gt;
* erst wenn n=10, trifft die Bedingung nicht zu, die Operationen der Schleife werden nicht durchgeführt &lt;br /&gt;
* finden sich weiter Programmzeilen unterhalb der Schleife, die nicht Teil der Schleife sind, werden diese Programmzeilen erst nach Beendigung der Schleife ausgeführt&lt;br /&gt;
[[File:Flow diagram while_schleife.png|200px|thumb|center|flowchart ''while''-Schleife]]&lt;br /&gt;
&lt;br /&gt;
== ''for''- Schleife ==&lt;br /&gt;
 &lt;br /&gt;
 #Befehl: &lt;br /&gt;
 for element in sammlung: &lt;br /&gt;
 	befehl()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 liste=[“Python”, 1, 4.5, True]&lt;br /&gt;
 &lt;br /&gt;
 for element in liste: &lt;br /&gt;
 	print(element)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Python&lt;br /&gt;
 1&lt;br /&gt;
 4.5&lt;br /&gt;
 True&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* erlaubt wie die ‘‘while‘‘- Schleife die automatische Wiederholung von Befehlen &lt;br /&gt;
* bietet im Gegensatz zur ‘‘while‘‘-Schleife einige Vorteile (die Funktionen der for-schleife wären zwar auch mit einer while schleifen lösbar, sind aber mit for schleifen deutlich einfacher zu lösen) &lt;br /&gt;
* die ''for''- Schleife eignet sich besonders gut für die einzelne Ausgabe der Elemente von Dictionaries &lt;br /&gt;
* sowie die Durchführung von Befehlen, die für jedes Element einer Sequenz (z.B. str) oder Sammlung (z.B. Liste) einmal durchgeführt werden soll&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;for&amp;quot; kommt der  Name der Variablen, dieser steht stellvertretend für jedes Element einer Sammlung oder Sequenz&lt;br /&gt;
* beim ''input''-Befehl war es vorteilhaft die beim Programmieren noch nicht bekannte (weil erst später durch den Nutzer erfolgende) Eingabe bereits im Programmcode stellvertretende durch eine Variable zu definieren&lt;br /&gt;
* so konnte z.B. eine Rechnungen mit einer nicht bekannten Zahl programmiert werden &lt;br /&gt;
* das gleiche Prinzip gilt auch für die Variable der &amp;quot;for&amp;quot;-Schleife (diese kann natürlich jeden beliebigen Namen annehmen)  &lt;br /&gt;
* im Beispiel_1 steht die Variable &amp;quot;element&amp;quot; für die Elemente der Liste namens &amp;quot;liste&amp;quot;&lt;br /&gt;
* die Variable &amp;quot;element&amp;quot; steht zwar für alle Elemente der Liste, also “Python”, 1, 4.5 und True, aber nicht gleichzeitig &lt;br /&gt;
* im ersten Durchlauf der Schleife steht sie für das erste Element der Liste (&amp;quot;Python&amp;quot;), nun werden die Befehle der Schleife ausgeführt:&lt;br /&gt;
* print(element) wird im ersten Durchlauf also zu print(&amp;quot;Python&amp;quot;) &lt;br /&gt;
* im zweiten Durchlauf steht die Variable für das zweite Element (1), print(element) wird im zweiten Durchlauf also zu print(1) usw.&lt;br /&gt;
* der  darauf folgende Ausdruck &amp;quot;in&amp;quot; dient dazu die Liste, das Dictionary, den String etc. anzugeben, mit dessen Elemente die Schleife durchgeführt werden soll&lt;br /&gt;
* dementsprechend folgt darauf der Namen einer Liste, eines Dictionaries oder eines Strings (ein String kann durch eine Variable gespeichert sein oder direkt angegeben werden), daraufhin folgt ein Doppelpunkt&lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ==== &lt;br /&gt;
&lt;br /&gt;
* es wird überprüft ob es ein Element gibt, wessen Wert die Variabel annehmen kann &lt;br /&gt;
* trifft das zu laufen die Befehl der Schleife ab, wobei die Variable immer für den entsprechenden Wert des Elements steht &lt;br /&gt;
* gibt es keine Elemente mehr, dessen Wert noch nicht angenommen wurde, bricht die Schleife ab&lt;br /&gt;
* somit läuft eine for-Schleife immer für jedes Element einmal ab und läuft so häufig ab wie es Elemente gibt (ohne Modifikationen s. unten)&lt;br /&gt;
&lt;br /&gt;
[[File:flowchart ''for''-Schleife.png|200px|thumb|center|flowchart ''for''-Schleife]]&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=848</id>
		<title>3.Befehle</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Befehle&amp;diff=848"/>
		<updated>2021-08-01T10:37:37Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* type-Befehl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ''print''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 print()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 print(“hello“)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 hello &lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* der entsprechende Inhalt des ''print''-Befehls wird in der Console ausgegeben &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die runden Klammern dienen dazu den Anfang und das Ende der Ausgabe zu markieren&lt;br /&gt;
* Wörter, bei denen es sich nicht um einen Variablennamen handelt, müssen in Anführungszeichen gesetzt werden&lt;br /&gt;
* geschieht das nicht wird ein Syntaxfehler angezeigt (s.Beispiel_2)&lt;br /&gt;
* int und floats werden ohne Anführungszeichen eingegeben&lt;br /&gt;
&lt;br /&gt;
 #Beipsiel_2:&lt;br /&gt;
 print(falsch)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 NameError: name 'falsch' is not defined&lt;br /&gt;
&lt;br /&gt;
* Python geht davon aus das es sich bei „falsch“ um eine Variable handelt und möchte den Wert dieser Variablen ausgeben. Es wurde aber keine Variable mit den Namen „falsch“ definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ''type''-Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 type()&amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel_1: &lt;br /&gt;
 a=&amp;quot;abc&amp;quot;&lt;br /&gt;
 d=True&lt;br /&gt;
 print(type(a))&lt;br /&gt;
 print(type(1))&lt;br /&gt;
 print(type(1.0)&lt;br /&gt;
 print(type(d))&lt;br /&gt;
 &lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 print(type(buch_1))&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 &amp;lt;class 'str'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'int'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'float'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'bool'&amp;gt;&lt;br /&gt;
 &amp;lt;class 'dict'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Funktion===&lt;br /&gt;
* mit dem ''type''-Befehl lässt sich der Datentyp bestimmen&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* um den Datentyp zu bestimmen wird dieser in die Klammern des ''type''-Befehls geschrieben &lt;br /&gt;
* dabei kann es sich direkt um den Datentyp handeln oder einen Varibalennamen &lt;br /&gt;
* auch hier ist der print Befehl wieder notwendig um das Ergebnis ausgeben zu lassen &lt;br /&gt;
* ohne den print -Befehl wird der type -Befehl zwar ausgeführt, aber nicht in der Console ausgegeben&lt;br /&gt;
&lt;br /&gt;
== ''input'' -Befehl ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 eingabe=input()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel: &lt;br /&gt;
 zahl=input()&lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 3 #eingegebene Zahl des Nutzers im Eingabefeld  &lt;br /&gt;
 3 #durch print-Befehl ausgegebene Zahl&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
* ermöglicht dem Nutzer die Interaktion mit dem Programm &lt;br /&gt;
* so kann z.B. ein Rechenprogramm mit jeder beliebigen vom Nutzer eingegebenen Zahl rechnen und nicht nur mit vorab programmierten Zahlen &lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;input&amp;quot; folgt eine Klammer, die bei Ausführung des Programms ein Eingabefeld in der Console erzeugt&lt;br /&gt;
* gleichzeitig handelt es sich beim ''input''-Befehl auch um ein ''print''-Befehl, dazu muss der entsprechende Text einfach in die Klammer eingegeben werden (s. Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 print(zahl)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
* die Eingabe des Nutzers wird meist durch eine Variable definiert, d.h.: &lt;br /&gt;
 eingabe=input()&lt;br /&gt;
* da der einzutragende Wert bei der Programmierung nicht bekannt ist, kann so „stellvertretend“ mit der Variablen programmiert werden &lt;br /&gt;
* s. Beispiel_3, bei der die Rechenoperation „*2“ mit der Variablen „zahl“ programmiert wird, welche später durch die Eingabe des Nutzers einen Zahlenwert erhält&lt;br /&gt;
* der Wert der Variablen wird also erst festgelegt, während das Programm läuft &lt;br /&gt;
* in der Console entsteht durch den ''input-Befehl'' ein „Eingabefeld“ (nicht direkt sichtbar) in das der Nutzer einen Wert (in Beispiel_1 eine Zahl) eintrage kann &lt;br /&gt;
* ACHTUNG!: jede Eingabe wird durch den input-Befehl automatisch als string gespeichert &lt;br /&gt;
* in Bespiel_3 wird die 3 in string-Form abgespeichert &lt;br /&gt;
* die Rechenoperation wird nicht als Multiplikation mit 2 verstanden sondern als Wiederholung des strings &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_3: &lt;br /&gt;
 zahl=input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;)&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 33&lt;br /&gt;
&lt;br /&gt;
* der string 3 wird wiederholt und es kommt 33 statt 6 heraus &lt;br /&gt;
* Lösung: man kann den Datentyp des &amp;quot;inputs&amp;quot; vorab definieren:&lt;br /&gt;
 int(input()) , float(input())&lt;br /&gt;
* weiß man vorab nicht um welchen Datentypen es sich handelt ist der eval()-Befehl zu empfehlen (s. Beispiel 4) , dieser speichert die Eingabe automatisch unter dem passenden Datentypen ab (string, integer, float) &lt;br /&gt;
* hier ist allerdings zu beachten, dass ein string wieder in Anführungszeichen gesetzt werden muss&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_4: &lt;br /&gt;
 zahl=eval(input(&amp;quot;Gib hier diene Zahl ein: &amp;quot;))&lt;br /&gt;
 ergebnis= zahl*2&lt;br /&gt;
 print(ergebnis)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Gib hier deine Zahl ein: 3&lt;br /&gt;
 6&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: 2.4&lt;br /&gt;
 4.8&lt;br /&gt;
 #oder &lt;br /&gt;
 Gib hier deine Zahl ein: &amp;quot;a&amp;quot;&lt;br /&gt;
 aa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ''while''-Schleife ==&lt;br /&gt;
&lt;br /&gt;
 #Befehl&lt;br /&gt;
 while Bedingung:&lt;br /&gt;
     Operation() &lt;br /&gt;
&lt;br /&gt;
 #Beispiel:&lt;br /&gt;
 n=1&lt;br /&gt;
 while n&amp;lt;10: &lt;br /&gt;
     print(n)&lt;br /&gt;
     n=n+1&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* bestimmte Operationen werden automatisch wiederholt &lt;br /&gt;
* erspart viel Programmierarbeit, da nicht alle Operationen einzeln programmiert werden müssen &lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* die Schleife wird mit dem Ausdruck &amp;quot;while&amp;quot; begonnen &lt;br /&gt;
* darauf folgt eine Bedingung, die überprüft wird (z.B. n&amp;lt;10) gefolgt von einem Doppelpunkt&lt;br /&gt;
* in den nächsten Zeilen folgen die Operationen, die innerhalb der Schleife durchgeführt werden sollen &lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist &lt;br /&gt;
* die ''while''-Schleife sollte so programmiert sein, dass sie irgendwann zu einem Ende kommt und nicht endlos weiterläuft, d.h. die zu überprüfende Bedingung darf irgendwann nicht mehr zutreffen &lt;br /&gt;
* --&amp;gt; ansonsten kommt es zu einer endlosen Schleife  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ====&lt;br /&gt;
* am besten wird die Funktion und die Syntax einer Schleife klar, wenn man sie Schritt für Schritt durchgeht, hier am Beispiel_1: &lt;br /&gt;
* '''ersten Zeile: der Variablen n wir der Wert 1 zugeordnet''' &lt;br /&gt;
* '''zweite Zeile: so lange n kleiner als 10 ist werden folgende Operationen durchgeführt''' &lt;br /&gt;
*(hier wird die Bedingung überprüft, trifft sie zu werden die Operationen der Schleife durchgeführt)  &lt;br /&gt;
* '''dritte Zeile: gebe den Wert von n aus''' &lt;br /&gt;
* (im ersten Durchlauf beträgt der Wert, wie in der ersten Zeile definiert, den Wert 1) &lt;br /&gt;
* '''vierte Zeile: definiere die Variable n neu, indem du den Wert von n nimmst und 1 addierst'''&lt;br /&gt;
* (n wird neu definiert als der alte Wert von n plus eins, also 1+1, damit ist n jetzt 2) &lt;br /&gt;
* sobald die Operationen der Schleife durchgeführt sind, beginnt sie wieder von Neuem, also mit der Überprüfung der Bedingung &lt;br /&gt;
* so wird der Wert n immer größer&lt;br /&gt;
* erst wenn n=10, trifft die Bedingung nicht zu, die Operationen der Schleife werden nicht durchgeführt &lt;br /&gt;
* finden sich weiter Programmzeilen unterhalb der Schleife, die nicht Teil der Schleife sind, werden diese Programmzeilen erst nach Beendigung der Schleife ausgeführt&lt;br /&gt;
[[File:Flow diagram while_schleife.png|200px|thumb|center|flowchart ''while''-Schleife]]&lt;br /&gt;
&lt;br /&gt;
== ''for''- Schleife ==&lt;br /&gt;
 &lt;br /&gt;
 #Befehl: &lt;br /&gt;
 for element in sammlung: &lt;br /&gt;
 	befehl()&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 liste=[“Python”, 1, 4.5, True]&lt;br /&gt;
 &lt;br /&gt;
 for element in liste: &lt;br /&gt;
 	print(element)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Python&lt;br /&gt;
 1&lt;br /&gt;
 4.5&lt;br /&gt;
 True&lt;br /&gt;
&lt;br /&gt;
=== Funktion ===&lt;br /&gt;
* erlaubt wie die ‘‘while‘‘- Schleife die automatische Wiederholung von Befehlen &lt;br /&gt;
* bietet im Gegensatz zur ‘‘while‘‘-Schleife einige Vorteile (die Funktionen der for-schleife wären zwar auch mit einer while schleifen lösbar, sind aber mit for schleifen deutlich einfacher zu lösen) &lt;br /&gt;
* die ''for''- Schleife eignet sich besonders gut für die einzelne Ausgabe der Elemente von Dictionaries &lt;br /&gt;
* sowie die Durchführung von Befehlen, die für jedes Element einer Sequenz (z.B. str) oder Sammlung (z.B. Liste) einmal durchgeführt werden soll&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* nach den Ausdruck &amp;quot;for&amp;quot; kommt der  Name der Variablen, dieser steht stellvertretend für jedes Element einer Sammlung oder Sequenz&lt;br /&gt;
* beim ''input''-Befehl war es vorteilhaft die beim Programmieren noch nicht bekannte (weil erst später durch den Nutzer erfolgende) Eingabe bereits im Programmcode stellvertretende durch eine Variable zu definieren&lt;br /&gt;
* so konnte z.B. eine Rechnungen mit einer nicht bekannten Zahl programmiert werden &lt;br /&gt;
* das gleiche Prinzip gilt auch für die Variable der &amp;quot;for&amp;quot;-Schleife (diese kann natürlich jeden beliebigen Namen annehmen)  &lt;br /&gt;
* im Beispiel_1 steht die Variable &amp;quot;element&amp;quot; für die Elemente der Liste namens &amp;quot;liste&amp;quot;&lt;br /&gt;
* die Variable &amp;quot;element&amp;quot; steht zwar für alle Elemente der Liste, also “Python”, 1, 4.5 und True, aber nicht gleichzeitig &lt;br /&gt;
* im ersten Durchlauf der Schleife steht sie für das erste Element der Liste (&amp;quot;Python&amp;quot;), nun werden die Befehle der Schleife ausgeführt:&lt;br /&gt;
* print(element) wird im ersten Durchlauf also zu print(&amp;quot;Python&amp;quot;) &lt;br /&gt;
* im zweiten Durchlauf steht die Variable für das zweite Element (1), print(element) wird im zweiten Durchlauf also zu print(1) usw.&lt;br /&gt;
* der  darauf folgende Ausdruck &amp;quot;in&amp;quot; dient dazu die Liste, das Dictionary, den String etc. anzugeben, mit dessen Elemente die Schleife durchgeführt werden soll&lt;br /&gt;
* dementsprechend folgt darauf der Namen einer Liste, eines Dictionaries oder eines Strings (ein String kann durch eine Variable gespeichert sein oder direkt angegeben werden), daraufhin folgt ein Doppelpunkt&lt;br /&gt;
* die zur Schleife gehörenden Operationen sind dadurch gekennzeichnet, dass der Code  eingerückt ist  &lt;br /&gt;
&lt;br /&gt;
==== Ablauf der Schleife ==== &lt;br /&gt;
&lt;br /&gt;
* es wird überprüft ob es ein Element gibt, wessen Wert die Variabel annehmen kann &lt;br /&gt;
* trifft das zu laufen die Befehl der Schleife ab, wobei die Variable immer für den entsprechenden Wert des Elements steht &lt;br /&gt;
* gibt es keine Elemente mehr, dessen Wert noch nicht angenommen wurde, bricht die Schleife ab&lt;br /&gt;
* somit läuft eine for-Schleife immer für jedes Element einmal ab und läuft so häufig ab wie es Elemente gibt (ohne Modifikationen s. unten)&lt;br /&gt;
&lt;br /&gt;
[[File:flowchart ''for''-Schleife.png|200px|thumb|center|flowchart ''for''-Schleife]]&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=847</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=847"/>
		<updated>2021-08-01T10:34:49Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Tupel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&amp;lt;br&amp;gt;&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere)&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 [[&amp;quot;Hund&amp;quot;,100,399,99,True],[&amp;quot;Katze&amp;quot;,60,249,99,True],[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]]&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&amp;lt;br&amp;gt;&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=846</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=846"/>
		<updated>2021-08-01T10:33:25Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element in Dictionary verändern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&amp;lt;br&amp;gt;&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere)&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 [[&amp;quot;Hund&amp;quot;,100,399,99,True],[&amp;quot;Katze&amp;quot;,60,249,99,True],[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]]&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&amp;lt;br&amp;gt;&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=845</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=845"/>
		<updated>2021-08-01T10:32:21Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Listen in Listen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&amp;lt;br&amp;gt;&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere)&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 [[&amp;quot;Hund&amp;quot;,100,399,99,True],[&amp;quot;Katze&amp;quot;,60,249,99,True],[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]]&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=844</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=844"/>
		<updated>2021-08-01T10:29:01Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element aus Liste löschen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&amp;lt;br&amp;gt;&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=843</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=843"/>
		<updated>2021-08-01T10:28:40Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element zur Liste hinzufügen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=842</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=842"/>
		<updated>2021-08-01T10:28:16Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element zur Liste hinzufügen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&amp;lt;br&amp;gt;&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=841</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=841"/>
		<updated>2021-08-01T10:27:58Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element zur Liste hinzufügen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=840</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=840"/>
		<updated>2021-08-01T10:25:15Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element in Liste verändern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&amp;lt;br&amp;gt;&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=839</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=839"/>
		<updated>2021-08-01T10:23:31Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element in Liste verändern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=838</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=838"/>
		<updated>2021-08-01T10:23:12Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Element in Liste verändern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=837</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=837"/>
		<updated>2021-08-01T10:21:32Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Bereich der Liste ausgeben lassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=836</id>
		<title>2.Datentypen und Datenstrukturen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=2.Datentypen_und_Datenstrukturen&amp;diff=836"/>
		<updated>2021-08-01T10:17:44Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Liste ausgeben lassen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&lt;br /&gt;
In Python unterscheidet man vier verschiedene Datentypen (Klassen):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datentyp !! Abkürzung !! Bedeutung  !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| String || str || Zeichenkette || &amp;quot;abc&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Integer || int || Ganze Zahl || 1&lt;br /&gt;
|-&lt;br /&gt;
| Float || float || Dezimalzahl || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || bool || Wahrheitsgehalt || True, False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Datentyp kann durch den ''type''-Befehl abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
== Datenstrukturen ==&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet zwischen drei verscheiden Datenstrukturen: &lt;br /&gt;
Listen, Dictionary und Tupel. Alle diese Datenstrukturen stellen Organisationsformen&lt;br /&gt;
von Daten in Python dar. Das heißt sie erleichtert vor allem die Handhabung größerer Datenmengen,&lt;br /&gt;
indem sie diese in geeigneter Form darstellen und speichern. &lt;br /&gt;
Sie unterscheide sich jedoch in ihrem Aufbau und ihren spezifischen Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== Listen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste= [&amp;quot;string&amp;quot;,variable,1, 2.0,True] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_2)&lt;br /&gt;
 print(tier_3)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Fisch', 3, 1, 50, False]&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
* haben dieselbe Funktion wie Listen im realen Leben &lt;br /&gt;
* mit Listen können mehrere Werte unter einem Namen abgespeichert werden&lt;br /&gt;
* macht ein Programmcode übersichtlicher und erleichtert die Arbeit, weil nicht jeder einzelne Wert mit einem eigenen Variablennamen gespeichert werden muss&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* die Liste erhält einen Namen, welcher wie eine Variable durch ein Gleichheitszeichen den Elementen der Liste zugeordnet wird&lt;br /&gt;
* die Elemente der Liste werden in eckige Klammer gesetzt und müssen mit einem Komma voneinander getrennt werden &lt;br /&gt;
* in einer Liste können alle unterschiedlichen Datentypen vorkommen&lt;br /&gt;
&lt;br /&gt;
===== Liste ausgeben lassen =====&lt;br /&gt;
* die ganze Liste lässt sich durch einen print-Befehl ausgeben (s. Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente der Liste ausgeben lassen ======&lt;br /&gt;
* auch einzelne Elemente der Liste können ausgegeben werden (s. Beispiel_2)&lt;br /&gt;
* dabei wird die Position des auszugebenden Elements durch eine Indexzahl in eckigen Klammern nach dem Listennamen angegeben &lt;br /&gt;
* Achtung: bei Python wird das Zählen bei 0 gestartet, d.h. das erste Element in der Liste besitzt die Position 0&lt;br /&gt;
* es kann auch von hinten gezählt werden, dabei besitzt das erste Element (welches von vorne gezählt das letzte wäre) die Position -1 usw.&lt;br /&gt;
&lt;br /&gt;
====== Bereich der Liste ausgeben lassen  ======&lt;br /&gt;
* es lässt sich auch ein Bereich der Liste ausgeben, wobei die Positionen der Elemente durch ein Doppelzeichen getrennt werden (s.Beispiel_2)&lt;br /&gt;
* die erste Indexzahl schließt die Position des Elements ein,welche ausgegeben wird &lt;br /&gt;
* die zweite gibt die Position des Elements an, welches nicht mehr im Bereich liegt und demnach nicht ausgegeben wird &lt;br /&gt;
* um die Syntax des Befehls zu verstehen, ist es sinnvoll, die verschiedenen Möglichkeiten einmal selbst auszuprobieren und die Aufgaben 4 und 5 auf dem Aufgabenblatt zu bearbeiten &lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
 print(tier_1[1])&lt;br /&gt;
 print(tier_1[-1])&lt;br /&gt;
 print(tier_1[0:4])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 Hund&lt;br /&gt;
 100&lt;br /&gt;
 True&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
 ['Hund', 100, 399, 99]&lt;br /&gt;
&lt;br /&gt;
===== Liste verändern =====&lt;br /&gt;
* wie Variablen sind auch Listen veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden &lt;br /&gt;
&lt;br /&gt;
====== Element in Liste verändern ======&lt;br /&gt;
* Elemente der Liste lassen sich verändern, sowie auch der Wert von Variablen neu definiert werden kann &lt;br /&gt;
* dafür schreibt man den Namen der Liste, dahinter eine Indexzahl in eckigen Klammern, wobei die Indexzahl die Position des zu verändernden Elements angibt&lt;br /&gt;
* die Zuweisung des neuen Werts erfolgt durch ein Gleichheitszeichen und den neuen Wert, den das Element der Liste annehmen soll (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste[Position]= neuer Wert&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1[0]=&amp;quot;Tiger&amp;quot;&lt;br /&gt;
 tier_1[1]=500&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Tiger', 500, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
====== Element zur Liste hinzufügen ======&lt;br /&gt;
* Listen können erweitert werden &lt;br /&gt;
* dazu schreibt man den Namen der Liste ein Gleichheitszeichen, erneut den Namen der Liste, ein „+“ und das Element das hinzugefügt werden soll in eckigen Klammern (s.Beispiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 liste=liste + [neues Element]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 tier_1=tier_1+[&amp;quot;Elefant&amp;quot;]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Elefant']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== Element aus Liste löschen ======&lt;br /&gt;
* Elemente lassen sich mit dem del -Befehl aus der Liste entfernen (s.Beispiel_5)&lt;br /&gt;
* nach „del“ folgt der Listenname und die Position des zu löschenden Elements in eckigen Klammern &lt;br /&gt;
&lt;br /&gt;
 Befehl:&lt;br /&gt;
 del liste[]&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_5:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
&lt;br /&gt;
 del tier_1[1]&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 ['Hund', 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Addition und Multiplikation von Listen =====&lt;br /&gt;
* Listen können miteinander addiert oder mit Zahlen multipliziert werden&lt;br /&gt;
(s. Beispiel_6)&lt;br /&gt;
* werden zwei Listen addiert, wird der Inhalt der Listen hintereinander ausgegeben &lt;br /&gt;
* wird eine Liste mit einer Zahl multipliziert, wird der Inhalt der Liste entsprechend oft hintereinander ausgegeben&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_6:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 print(tier_1 + tier_2)&lt;br /&gt;
 print(tier_1 *2)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Katze', 60, 249, 99, True]&lt;br /&gt;
 ['Hund', 100, 399, 99, True, 'Hund', 100, 399, 99, True]&lt;br /&gt;
&lt;br /&gt;
===== Listen in Listen ===== &lt;br /&gt;
* Elemente einer Liste können selbst eine Liste sein, so erhält man Listen in einer Liste (s.Beispiel_7) &lt;br /&gt;
* es entsteht eine zweidimensionale Liste mit einer übergeordneten Liste (im Beispiel: alle_tiere) und den untergeordneten Listen ( tier_1, tier_2, tier_3) &lt;br /&gt;
* auf die Elemente der übergeordneten Liste lässt sich wie oben gezeigt zugreifen &lt;br /&gt;
* möchte man nur auf ein Element der untergeordneten Liste zugreifen, sind zwei Indexzahlen notwendig&lt;br /&gt;
* die erste Indexzahl gibt die Position des Elements in der übergeordneten Liste an&lt;br /&gt;
* die zweite Indexzahl gibt die Position des Elements in der untergeordneten Liste an (s.Beispiel_7)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 print(liste[Position][Position])&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_7:&lt;br /&gt;
 tier_1=[&amp;quot;Hund&amp;quot;,100,399,99,True]&lt;br /&gt;
 tier_2=[&amp;quot;Katze&amp;quot;,60,249,99,True]&lt;br /&gt;
 tier_3=[&amp;quot;Fisch&amp;quot;,3,1 ,50,False]&lt;br /&gt;
 &lt;br /&gt;
 alle_tiere=[tier_1, tier_2, tier_3]&lt;br /&gt;
 print(alle_tiere[0])&lt;br /&gt;
 print(alle_tiere[0][0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ['Hund', 100, 399, 99, True]&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
=== Dictionaries ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary={&amp;quot;key_1&amp;quot;:Element_1,&amp;quot;key_2&amp;quot;:Element_2}&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 print(buch_1) &lt;br /&gt;
 print(buch_1[&amp;quot;Buch&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Autor&amp;quot;])&lt;br /&gt;
 print(buch_1[&amp;quot;Preis&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45}&lt;br /&gt;
 Der Herr der Ringe&lt;br /&gt;
 Tolkien&lt;br /&gt;
 45&lt;br /&gt;
&lt;br /&gt;
==== Funktion ====&lt;br /&gt;
Listen sind zwar geeignet, um größere Mengen an Daten in übersichtlicher &lt;br /&gt;
und gut manipulierbarer Weise abzuspeichern, haben aber einen entscheidenden Nachteil.&lt;br /&gt;
Um auf ein Element in einer Liste zugreifen zu können, ist es notwendig die Position &lt;br /&gt;
des Elements in der Liste zu kennen. Bei kürzeren Listen lässt sich vielleicht noch der Überblick behalten. Sobald Listen aber eine gewissen Anzahl an Elementen überschreiten, &lt;br /&gt;
in einem Programm mehrere Listen verwendet werden oder sogar Listen in Listen gespeichert sind, &lt;br /&gt;
ist jeglicher Versuch sich die Positionen der Elemente zu merken vergebens. &lt;br /&gt;
Hier bringen die sogenannten Dictionaries den entscheidenden Vorteil. &lt;br /&gt;
Dictionaries funktionieren wie Listen, wenn es darum geht Informationen abzuspeichern. &lt;br /&gt;
Doch der Zugriff auf die Elemente folgt nicht durch eine Indexnummer sondern über ein sogenannten key oder Schlüsselbegriff. &lt;br /&gt;
Um auf die Elemente über einen key zugreifen zu können, werden den Elementen im Dictionary ein Schlüsselbegriff zugeordnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Syntax ====&lt;br /&gt;
* nach dem Namen des Dictionary und dem Gleichheitszeichen folgt eine geschweifte Klammer {}&lt;br /&gt;
* danach folgt der Key, dabei kann es sich um ein integer, float, bool oder string handeln &lt;br /&gt;
* darauf folgt das Listenelement, getrennt durch einen Doppelpunkt vom Key und durch ein Komma vom nächsten Key-Element Paar &lt;br /&gt;
&lt;br /&gt;
===== Dictionary ausgeben lassen =====&lt;br /&gt;
* das ganze Dictionary lässt sich durch einen print-Befehl ausgeben (s. Beispie_1)&lt;br /&gt;
&lt;br /&gt;
====== einzelne Elemente des Dictionaries ausgeben ======&lt;br /&gt;
* der Zugriff erfolgt durch den key &lt;br /&gt;
* die Syntax ist analog zum Abruf der Elemente einer Liste, nur das statt der Indexzahl der key in die eckige Klammer geschrieben wird (s.Beispeil_1)&lt;br /&gt;
&lt;br /&gt;
===== Dictionary verändern =====&lt;br /&gt;
* wie Listen sind auch Dictionaries veränderbar, es können Elemente hinzugefügt, geändert und sogar gelöscht werden&lt;br /&gt;
&lt;br /&gt;
====== Element in Dictionary verändern ======&lt;br /&gt;
* die Syntax ist analog zur Veränderung eines Elements in Listen, nur hier wird der key, statt der Position in die eckigen Klammern hinter dem Namen des Dictionaries gesetzt (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Befehl: &lt;br /&gt;
 dictionary[(bestehender)key]= neuer Wert&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 buch_1[&amp;quot;Preis&amp;quot;]= 23&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 23}&lt;br /&gt;
&lt;br /&gt;
====== Element zum Dictionary hinzufügen ======&lt;br /&gt;
* um Elemente zum Dictionary hinzuzufügen ist es notwendig auch gleichzeitig ein key für das Element zu definieren &lt;br /&gt;
* nach dem Listennamen und dem Key in eckigen Klammern folg ein Gleichheitszeichen und der Wert des neuen Elements (s.Beispiel_3)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 dictionary[(neuer) key]= neues Element&lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_3:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 buch_1[&amp;quot;Erscheinungsjahr&amp;quot;]= 1954&lt;br /&gt;
 buch_1[&amp;quot;Bewertung&amp;quot;]=&amp;quot;sehr gut&amp;quot;&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien', 'Preis': 45, 'Erscheinungsjahr': 1954, 'Bewertung':   'sehr gut'}&lt;br /&gt;
&lt;br /&gt;
====== Element aus Dictionary löschen ======&lt;br /&gt;
* analoger Aufbau zum del-Befehl bei Listen &lt;br /&gt;
* hier wird wieder anstatt der Indexzahl der key in die eckigen Klammern gesetzt (s.Besipiel_4)&lt;br /&gt;
&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 del dictionary[key] &lt;br /&gt;
 &lt;br /&gt;
 #Beispiel_4:&lt;br /&gt;
 buch_1={&amp;quot;Buch&amp;quot;:&amp;quot;Der Herr der Ringe&amp;quot;, &amp;quot;Autor&amp;quot;:&amp;quot;Tolkien&amp;quot;, &amp;quot;Preis&amp;quot;:45}&lt;br /&gt;
 &lt;br /&gt;
 del buch_1[&amp;quot;Preis&amp;quot;]&lt;br /&gt;
 print(buch_1)&lt;br /&gt;
&lt;br /&gt;
output &lt;br /&gt;
 {'Buch': 'Der Herr der Ringe', 'Autor': 'Tolkien'}&lt;br /&gt;
&lt;br /&gt;
=== Tupel ===&lt;br /&gt;
 #Befehl:&lt;br /&gt;
 tupel= element_1, element_2 &lt;br /&gt;
&lt;br /&gt;
 #Beispiel_1:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
 print(tier_1[0])&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
 ('Hund', 100, 399, 99, True)&lt;br /&gt;
 Hund&lt;br /&gt;
&lt;br /&gt;
==== Funktion ==== &lt;br /&gt;
* Tupelo sind unveränderliche Daten, d.h. die Elemente eines Tupels sind im Gegensatz zu Listen und Dictionaries nicht veränderbar oder löschbar &lt;br /&gt;
* sie können jedoch ergänzt werden &lt;br /&gt;
* Tupel werden genutzt, um Daten zu speichern, die nicht geändert werden sollen &lt;br /&gt;
* (man könnte diese natürlich auch in Dictionarie und Listen speichern, so geht man aber sicher, dass die Daten nicht ausersehen geändert werden; außerdem ist die Speicherperformance besser)  &lt;br /&gt;
&lt;br /&gt;
==== Syntax ==== &lt;br /&gt;
* die Erstellung von Tupeln ist analog zur Erstellung von Listen, nur hier werden keine Klammern benötigt (s.Beispiel_1) &lt;br /&gt;
* der Zugriff auf die Elemente des Tupels ist analog zur Syntax bei Listen (s.Beispiel_1)&lt;br /&gt;
&lt;br /&gt;
=====Tupel ausgeben lassen =====&lt;br /&gt;
* sowohl das ausgeben des ganzen Tupels, als auch der einzelnen Elemente folgt der selben Syntax der Listen   &lt;br /&gt;
&lt;br /&gt;
===== Erweiterung eines Tupels =====&lt;br /&gt;
* auch hier ist die Syntax analog zur Erweiterung von Listen&lt;br /&gt;
* das neue Element muss selbst ein Tupel sein, um es zum Tupel hinzufügen zu können &lt;br /&gt;
* dazu muss das neue Element erst als Tupel abgespeichert werden &lt;br /&gt;
* um ein neues Element als Tupel zu speichern, wird ein Tupel mit nur einem Element erstellt &lt;br /&gt;
* nun kann dieser Tupel dem alten hinzugefügt werden (s.Beispiel_2)&lt;br /&gt;
&lt;br /&gt;
 #Beispiel_2:&lt;br /&gt;
 tier_1=&amp;quot;Hund&amp;quot;,100,399,99,True&lt;br /&gt;
 farbe= &amp;quot;braun&amp;quot;,&lt;br /&gt;
 tier_1=tier_1 + farbe&lt;br /&gt;
 print(tier_1)&lt;br /&gt;
&lt;br /&gt;
output&lt;br /&gt;
('Hund', 100, 399, 99, True, 'braun')&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=835</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=835"/>
		<updated>2021-08-01T10:14:00Z</updated>

		<summary type="html">&lt;p&gt;Mka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bioinformatik Grundkurs =&lt;br /&gt;
&lt;br /&gt;
 [[Q &amp;amp; A Bioinformatik Wiki]]&lt;br /&gt;
&lt;br /&gt;
'''Vorlesungen''':&lt;br /&gt;
   [[1_Datenbanken|1.Datenbanken]] | [[2_Transkriptom RNA Seq 1|2.Transkriptom RNA Seq 1]] | [[3_Alignments|3.Alignments]] | [[4_Burrows-Wheeler|4.Burrows-Wheeler]] | [[5_Transkriptom RNA Seq 2|5.Transkriptom RNA Seq 2]] | [[6_Normalisierungen|6.Normalisierungen]] | [[7_Multiples_Testen|7.Multiples_Testen]] | [[8_Galaxy|8.Galaxy]] | [[9_Biomarker|9.Biomarker]] | [[10_BLAST|10.BLAST]] | [[11_BLAST_II|11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Übungen''':&lt;br /&gt;
   [[1.Datenbanken]] | [[2.Transkriptom RNA Seq 1]] | [[3.Alignments]] | [[4.Burrows-Wheeler]] | [[5.Transkriptom RNA Seq 2]] | [[6.Normalisierungen]] | [[7.Hypothesentests]] | [[8.Galaxy ]] | [[9.Biomarker]] | [[10.BLAST]] | [[11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Python''':&lt;br /&gt;
   [[1.Einführung]] | [[2.Datentypen und Datenstrukturen]] | [[3.Befehle]] | [[4.Übungsaufgaben]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Glossar]]&lt;br /&gt;
&lt;br /&gt;
== Ansprechpartner ==&lt;br /&gt;
Prof. Dr. Karsten Hiller (karsten.hiller@tu-braunschweig.de)&lt;br /&gt;
&lt;br /&gt;
Wiki Technik:&lt;br /&gt;
* [[User:Nko|Nils Koschnitzki]]&lt;br /&gt;
&lt;br /&gt;
Inhalt:&lt;br /&gt;
&lt;br /&gt;
WiSe 20/21:&lt;br /&gt;
* [[User:Mka|Michelle Khalil]]&lt;br /&gt;
&lt;br /&gt;
SoSe 20:&lt;br /&gt;
* [[User:Pge|Philip Gemke]]&lt;br /&gt;
&lt;br /&gt;
SoSe 19:&lt;br /&gt;
* [[User:Vero|Veronika Martin]]&lt;br /&gt;
* [[User:Patrick Melichar|Patrick Melichar]]&lt;br /&gt;
* [[User:L.motzko‎|Lukas Motzko]]&lt;br /&gt;
&lt;br /&gt;
== Semester Archive ==&lt;br /&gt;
''None''&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=834</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=834"/>
		<updated>2021-08-01T10:10:50Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Bioinformatik Grundkurs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bioinformatik Grundkurs =&lt;br /&gt;
&lt;br /&gt;
 [[Q &amp;amp; A Bioinformatik Wiki]]&lt;br /&gt;
&lt;br /&gt;
'''Vorlesungen''':&lt;br /&gt;
   [[1_Datenbanken|1.Datenbanken]] | [[2.Transkriptom RNA Seq 1]] | [[3.Alignments]] | [[4.Burrows-Wheeler]] | [[5.Transkriptom RNA Seq 2]] | [[6.Normalisierungen]] | [[7.Multiples_Testen]] | [[8.Galaxy]] | [[9.Biomarker]] | [[10.BLAST]] | [[11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Übungen''':&lt;br /&gt;
   [[1.Datenbanken]] | [[2.Transkriptom RNA Seq 1]] | [[3.Alignments]] | [[4.Burrows-Wheeler]] | [[5.Transkriptom RNA Seq 2]] | [[6.Normalisierungen]] | [[7.Hypothesentests]] | [[8.Galaxy ]] | [[9.Biomarker]] | [[10.BLAST]] | [[11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Python''':&lt;br /&gt;
   [[1.Einführung]] | [[2.Datentypen und Datenstrukturen]] | [[3.Befehle]] | [[4.Übungsaufgaben]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Glossar]]&lt;br /&gt;
&lt;br /&gt;
== Ansprechpartner ==&lt;br /&gt;
Prof. Dr. Karsten Hiller (karsten.hiller@tu-braunschweig.de)&lt;br /&gt;
&lt;br /&gt;
Wiki Technik:&lt;br /&gt;
* [[User:Nko|Nils Koschnitzki]]&lt;br /&gt;
&lt;br /&gt;
Inhalt:&lt;br /&gt;
&lt;br /&gt;
WiSe 20/21:&lt;br /&gt;
* [[User:Mka|Michelle Khalil]]&lt;br /&gt;
&lt;br /&gt;
SoSe 20:&lt;br /&gt;
* [[User:Pge|Philip Gemke]]&lt;br /&gt;
&lt;br /&gt;
SoSe 19:&lt;br /&gt;
* [[User:Vero|Veronika Martin]]&lt;br /&gt;
* [[User:Patrick Melichar|Patrick Melichar]]&lt;br /&gt;
* [[User:L.motzko‎|Lukas Motzko]]&lt;br /&gt;
&lt;br /&gt;
== Semester Archive ==&lt;br /&gt;
''None''&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=833</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Main_Page&amp;diff=833"/>
		<updated>2021-08-01T10:00:26Z</updated>

		<summary type="html">&lt;p&gt;Mka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bioinformatik Grundkurs =&lt;br /&gt;
&lt;br /&gt;
 [[Q &amp;amp; A Bioinformatik Wiki]]&lt;br /&gt;
&lt;br /&gt;
'''Vorlesungen''':&lt;br /&gt;
   [[1_Datenbanken]] | [[2.Transkriptom RNA Seq 1]] | [[3.Alignments]] | [[4.Burrows-Wheeler]] | [[5.Transkriptom RNA Seq 2]] | [[6.Normalisierungen]] | [[7.Multiples_Testen]] | [[8.Galaxy]] | [[9.Biomarker]] | [[10.BLAST]] | [[11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Übungen''':&lt;br /&gt;
   [[1.Datenbanken]] | [[2.Transkriptom RNA Seq 1]] | [[3.Alignments]] | [[4.Burrows-Wheeler]] | [[5.Transkriptom RNA Seq 2]] | [[6.Normalisierungen]] | [[7.Hypothesentests]] | [[8.Galaxy ]] | [[9.Biomarker]] | [[10.BLAST]] | [[11.BLAST_II]] &lt;br /&gt;
&lt;br /&gt;
'''Python''':&lt;br /&gt;
   [[1.Einführung]] | [[2.Datentypen und Datenstrukturen]] | [[3.Befehle]] | [[4.Übungsaufgaben]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Glossar]]&lt;br /&gt;
&lt;br /&gt;
== Ansprechpartner ==&lt;br /&gt;
Prof. Dr. Karsten Hiller (karsten.hiller@tu-braunschweig.de)&lt;br /&gt;
&lt;br /&gt;
Wiki Technik:&lt;br /&gt;
* [[User:Nko|Nils Koschnitzki]]&lt;br /&gt;
&lt;br /&gt;
Inhalt:&lt;br /&gt;
&lt;br /&gt;
WiSe 20/21:&lt;br /&gt;
* [[User:Mka|Michelle Khalil]]&lt;br /&gt;
&lt;br /&gt;
SoSe 20:&lt;br /&gt;
* [[User:Pge|Philip Gemke]]&lt;br /&gt;
&lt;br /&gt;
SoSe 19:&lt;br /&gt;
* [[User:Vero|Veronika Martin]]&lt;br /&gt;
* [[User:Patrick Melichar|Patrick Melichar]]&lt;br /&gt;
* [[User:L.motzko‎|Lukas Motzko]]&lt;br /&gt;
&lt;br /&gt;
== Semester Archive ==&lt;br /&gt;
''None''&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6_Normalisierungen&amp;diff=797</id>
		<title>6 Normalisierungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6_Normalisierungen&amp;diff=797"/>
		<updated>2021-06-08T11:34:34Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* RPKM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
=Normalisierungen=&lt;br /&gt;
Normalisierungen der RNASeq-Daten sind notwendig, um diese vergleichbar machen zu können und die tatsächliche Genexpression quantifizieren zu können. &lt;br /&gt;
==RPKM==&lt;br /&gt;
RPKM steht für 'Reads per kilobase of transcript per Million mapped reads' und ist eine Normalisierungsmethode für Expressionsstärken. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; RPKM =  \frac{ c_\text{i}}{L_\text{i} \cdot N} &amp;lt;/math&amp;gt; || c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i' &lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in kbp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;   \frac{ c_\text{i}}{L_\text{i}} &amp;lt;/math&amp;gt;  → Normalisierung der Genlänge &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt; L_\text{i} \cdot N &amp;lt;/math&amp;gt; → Normalisierung der Sequenziertiefe &lt;br /&gt;
Je höher der RPKM-Wert ist, desto höher ist die Genexpression. &amp;lt;br&amp;gt;&lt;br /&gt;
RPKM-Werte können gut zum Vergleich der Genexpressionen innerhalb einer Probe genutzt werden, jedoch sind sie nicht dafür geeignet mehrere Experimente bzw. Proben miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel:'''&lt;br /&gt;
&lt;br /&gt;
[[File:Beispiel Probe.png|Beispiel Probe]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; N=6*10^6 reads &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (A) =  \frac{12}{0,6 kbp \cdot 6 \cdot 10^6} = 3,33 \cdot 10^{-6}  &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (B) =  \frac{24}{1,1 kbp \cdot 6 \cdot 10^6} = 3,64  \cdot 10^{-6} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (C) =  \frac{11}{1,4 kbp \cdot 6 \cdot 10^6} = 1,31  \cdot 10^{-6} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch die Normalisierung der Expressionsstärken können diese nun miteinander vergleichen werden.In diesem Beispiel wird Gen B am stärksten exprimiert und Gen C am schwächsten.&lt;br /&gt;
&lt;br /&gt;
==TPM==&lt;br /&gt;
TPM steht für 'Transcripts per Million' und ist eine Normalisierungsmethode für Expressionsstärken. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;  TPM =  \frac{ c_\text{i}}{L_\text{i}}  \cdot  \dfrac {1}{\sum_\text{n} \dfrac {c_\text{n}}{L_\text{n}}}  \cdot 10^6 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt; || c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i'&amp;lt;br&amp;gt;&lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in bp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen&lt;br /&gt;
|} &lt;br /&gt;
Wenn 1 Millionen Transkripte sequenziert würden, wäre TPM&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; die Anzahl an Transkripten des Types 'i'. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel:''' &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Beispiel Probe.png|Beispiel Probe]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (A) =  \frac{ 12}{600}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 402614 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (B) =  \frac{ 24}{1100}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 439216 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (C) =  \frac{ 11}{1400}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 158170 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach der Normalisierung ist ein Vergleich der Genexpressionen möglich. Das Ergebnis gibt an, wie viele Transkripte der Gene entstehen würden, wenn 1 Millionen Transkripte sequenziert werden würden. So würde man z.B. für Gen B 429216 Transkripte erhalten und für Gen C 158170 Transkripte, somit wird Gen B stärker exprimiert, als Gen C. Die Summe der reads ergibt 1 Million.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Probleme von RPKM und TPM:'''&lt;br /&gt;
&lt;br /&gt;
Die beiden Methoden sind nur gut geeignet, um Expressionswerte bzw. Expressionslevel innerhalb einer Probe zu vergleichen.Von sehr heterologen Expressionsprofilen zwischen zwei Proben können identische Genexpressionen fälschlicherweise als unterschiedlich erkannt werden.&lt;br /&gt;
&lt;br /&gt;
Lösung: TMM als Normalisierungsmethode zwischen Proben&lt;br /&gt;
&lt;br /&gt;
==TMM==&lt;br /&gt;
TMM steht für 'Trimmed mean of M-values normalization method'.&amp;lt;br&amp;gt;&lt;br /&gt;
*Gesamtexpressionsstärke pro Probe wird bestimmt, um einzelne Genexpressionen zu bestimmen. &lt;br /&gt;
*Das Expressionsverhältnis zwischen zwei Bedingungen für ein Gen 'g' wird bestimmt.&lt;br /&gt;
*Genexpressionen von zwei Proben mit unterschiedlichen Bedingungen (z.B. krank und gesund) können miteinander verglichen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1.''' Bestimmung des '''Gewichtungsfaktors''' für das Expressionsverhältnis für Gen 'g' zwischen Probe 'k' ' und 'k'. Dabei werden kleinere Werte verstärkt und große abgeschwächt. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} =  \frac{ N_\text{k} - Y_\text{gk}}{N_\text{k} \cdot Y_\text{gk}}  +  \frac{ N_\text{k`} - Y_\text{gk`}}{N_\text{k`} \cdot Y_\text{gk`}} &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Mittelwert aller Expressionsverhältnisse'''  wird berechnet. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = log_2  \dfrac { \dfrac {Y_\text{gk}}{N_\text{k}}}{ \dfrac {Y_\text{gk`}}{N_\text{k`}}}  &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Gewichtete Mittelwerte aller Expressionsverhältnisse''' können berechnet werden. Einsetzen der in 1. und 2. ermittelten Werte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;math&amp;gt; TMM = 2^{log_2 (TMM_\text{k}^\text{k`})} &amp;lt;/math&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gesamt:''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; log_2 (TMM_\text{k}^\text{k`}) =  \frac{ \underset {g \in G}{\sum}   W_\text{gk}^\text{k´} \cdot M_\text{gk}^\text{k´}} { \sum_{g \in G} W_\text{gk}^\text{k´}} &amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Mittelwerte aller Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Gewichtungsfaktor der Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
G = Set aller Gene&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bedingungen für dieses Verfahren:''' &amp;lt;br&amp;gt;&lt;br /&gt;
* Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; , Y&amp;lt;sub&amp;gt;gk'&amp;lt;/sub&amp;gt; &amp;gt; 0&lt;br /&gt;
* Die oberen und unteren 30 % der &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} &amp;lt;/math&amp;gt; Werte werden nicht berücksichtigt&lt;br /&gt;
* Die 5 % am höchsten und niedrigsten exprimierten Gene werden nicht berücksichtigt&lt;br /&gt;
&lt;br /&gt;
== Beispielrechnung ==&lt;br /&gt;
 Gen       Zustand 1[bp]         Zustand 2[bp]&lt;br /&gt;
 A         200                   600&lt;br /&gt;
 B         600                   0 &lt;br /&gt;
 C         800                   960&lt;br /&gt;
 D         400                   480&lt;br /&gt;
 &lt;br /&gt;
 Summe     2000                  1680&lt;br /&gt;
&lt;br /&gt;
 Folgende Dinge gelten nun:&lt;br /&gt;
 * TMM braucht immer einen Referenzwert (hier: Zustand 1); Wenn man mehrere Proben hätte, könnte man diese alle an Zustand 1 messen.&lt;br /&gt;
&lt;br /&gt;
 * Zuerst normalisiert man die Counts innerhalb der Probe&lt;br /&gt;
     Ya/N                         Yb/N&amp;lt;br&amp;gt;&lt;br /&gt;
 A   &amp;lt;math&amp;gt;\frac{200}{2000}=0,1&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{240}{1680}=0,143&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt;\frac{600}{2000}=0,3&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{0}{1680}=0&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt;\frac{800}{2000}=0,4&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{960}{1680}=0,571&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt;\frac{400}{2000}=0,2&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{2480}{1680}=0,286&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 * Mittelwert der Expressionsverhältnisse&lt;br /&gt;
          Ma/b                         &lt;br /&gt;
 A   &amp;lt;math&amp;gt;log_{2} \frac{0,143}{0,1}=0,516&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt;log_{2} \frac{0}{0,3}= -Inf &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt;log_{2} \frac{0,571}{0,4}=0,513&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt;log_{2} \frac{0,286}{0,2}=0,516&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 *'''kleiner Praxistipp von eurem Admin''': &amp;lt;math&amp;gt;log_{2}&amp;lt;/math&amp;gt; ist der Logarithmus von 2, Es ist nicht der natürliche log, es ist nicht ln, es ist nichts mit eulerscher Zahl oder was eure Taschenrechner sonst noch so hergeben. Also sucht eine Funktion, in der ihr die Basis des log eintragen könnt und gebt dort eine 2 ein. &lt;br /&gt;
&lt;br /&gt;
 *Nun kommt der Gewichtungsfaktor ins Spiel&lt;br /&gt;
                Wa/b&lt;br /&gt;
 A   &amp;lt;math&amp;gt; \frac{1680-240}{1680*240} + \frac{2000-200}{2000*200}=0,081&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt; \frac{1680-0}{1680*0} + \frac{2000-600}{2000*600}= -Inf &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt; \frac{1680-960}{1680*960} + \frac{2000-800}{2000*800}=0,0012&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt; \frac{1680-480}{1680*480} + \frac{2000-400}{2000*400}=0,0035&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 '''Summe der Gewichtung 0,0128'''&lt;br /&gt;
&lt;br /&gt;
 *Nun werden die Mittelwerte der Expressionsverhältnisse gewichtet (durch den Gewichtungsfaktor)&lt;br /&gt;
 &lt;br /&gt;
 A   0,516 * 0,081  = 0,0042&lt;br /&gt;
 B   -&lt;br /&gt;
 C   0,513 * 0,0012 = 0,0006&lt;br /&gt;
 D   0,516 * 0,0018 = 0,0018&lt;br /&gt;
 Summe                0,0066&lt;br /&gt;
&lt;br /&gt;
 Nun wird TMM berechnet:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{\text{Summe der gewichteten Mittelwerte der Expressionsverhältnisse}}{\text{Summe Gewichtungsfaktoren}}=log_{2}(TMM)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{0,0066}{0,0128}=0,51=log_{2}(TMM)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 * Jetzt noch die Formel umsetzen:&lt;br /&gt;
 &amp;lt;math&amp;gt;log_{2}(TMM)= x&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2^{x} = TMM &amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2^{0,51} = 1,4296 &amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6_Normalisierungen&amp;diff=796</id>
		<title>6 Normalisierungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6_Normalisierungen&amp;diff=796"/>
		<updated>2021-06-08T11:12:45Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* RPKM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
=Normalisierungen=&lt;br /&gt;
Normalisierungen der RNASeq-Daten sind notwendig, um diese vergleichbar machen zu können und die tatsächliche Genexpression quantifizieren zu können. &lt;br /&gt;
==RPKM==&lt;br /&gt;
RPKM steht für 'Reads per kilobase of transcript per Million mapped reads' und ist eine Normalisierungsmethode für Expressionsstärken. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; RPKM =  \frac{ c_\text{i}}{L_\text{i} \cdot N}{ * 10^6} &amp;lt;/math&amp;gt; || c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i' &lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in kbp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;math&amp;gt;   \frac{ c_\text{i}}{L_\text{i}} &amp;lt;/math&amp;gt;  → Normalisierung der Genlänge &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt; L_\text{i} \cdot N &amp;lt;/math&amp;gt; → Normalisierung der Sequenziertiefe &lt;br /&gt;
Je höher der RPKM-Wert ist, desto höher ist die Genexpression. &amp;lt;br&amp;gt;&lt;br /&gt;
RPKM-Werte können gut zum Vergleich der Genexpressionen innerhalb einer Probe genutzt werden, jedoch sind sie nicht dafür geeignet mehrere Experimente bzw. Proben miteinander zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel:'''&lt;br /&gt;
&lt;br /&gt;
[[File:Beispiel Probe.png|Beispiel Probe]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; N=6*10^6 reads &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (A) =  \frac{12}{0,6 kbp \cdot 6 \cdot 10^6} = 3,33 \cdot 10^{-6}  &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (B) =  \frac{24}{1,1 kbp \cdot 6 \cdot 10^6} = 3,64  \cdot 10^{-6} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt; RPKM (C) =  \frac{11}{1,4 kbp \cdot 6 \cdot 10^6} = 1,31  \cdot 10^{-6} &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch die Normalisierung der Expressionsstärken können diese nun miteinander vergleichen werden.In diesem Beispiel wird Gen B am stärksten exprimiert und Gen C am schwächsten.&lt;br /&gt;
&lt;br /&gt;
==TPM==&lt;br /&gt;
TPM steht für 'Transcripts per Million' und ist eine Normalisierungsmethode für Expressionsstärken. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;  TPM =  \frac{ c_\text{i}}{L_\text{i}}  \cdot  \dfrac {1}{\sum_\text{n} \dfrac {c_\text{n}}{L_\text{n}}}  \cdot 10^6 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt; || c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i'&amp;lt;br&amp;gt;&lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in bp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen&lt;br /&gt;
|} &lt;br /&gt;
Wenn 1 Millionen Transkripte sequenziert würden, wäre TPM&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; die Anzahl an Transkripten des Types 'i'. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beispiel:''' &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Beispiel Probe.png|Beispiel Probe]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (A) =  \frac{ 12}{600}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 402614 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (B) =  \frac{ 24}{1100}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 439216 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;  TPM (C) =  \frac{ 11}{1400}  \cdot  \dfrac {1}{ \dfrac {12}{600} +  \dfrac {24}{1100} + \dfrac {11}{1400}}  \cdot 10^6  = 158170 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach der Normalisierung ist ein Vergleich der Genexpressionen möglich. Das Ergebnis gibt an, wie viele Transkripte der Gene entstehen würden, wenn 1 Millionen Transkripte sequenziert werden würden. So würde man z.B. für Gen B 429216 Transkripte erhalten und für Gen C 158170 Transkripte, somit wird Gen B stärker exprimiert, als Gen C. Die Summe der reads ergibt 1 Million.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Probleme von RPKM und TPM:'''&lt;br /&gt;
&lt;br /&gt;
Die beiden Methoden sind nur gut geeignet, um Expressionswerte bzw. Expressionslevel innerhalb einer Probe zu vergleichen.Von sehr heterologen Expressionsprofilen zwischen zwei Proben können identische Genexpressionen fälschlicherweise als unterschiedlich erkannt werden.&lt;br /&gt;
&lt;br /&gt;
Lösung: TMM als Normalisierungsmethode zwischen Proben&lt;br /&gt;
&lt;br /&gt;
==TMM==&lt;br /&gt;
TMM steht für 'Trimmed mean of M-values normalization method'.&amp;lt;br&amp;gt;&lt;br /&gt;
*Gesamtexpressionsstärke pro Probe wird bestimmt, um einzelne Genexpressionen zu bestimmen. &lt;br /&gt;
*Das Expressionsverhältnis zwischen zwei Bedingungen für ein Gen 'g' wird bestimmt.&lt;br /&gt;
*Genexpressionen von zwei Proben mit unterschiedlichen Bedingungen (z.B. krank und gesund) können miteinander verglichen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1.''' Bestimmung des '''Gewichtungsfaktors''' für das Expressionsverhältnis für Gen 'g' zwischen Probe 'k' ' und 'k'. Dabei werden kleinere Werte verstärkt und große abgeschwächt. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} =  \frac{ N_\text{k} - Y_\text{gk}}{N_\text{k} \cdot Y_\text{gk}}  +  \frac{ N_\text{k`} - Y_\text{gk`}}{N_\text{k`} \cdot Y_\text{gk`}} &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Mittelwert aller Expressionsverhältnisse'''  wird berechnet. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = log_2  \dfrac { \dfrac {Y_\text{gk}}{N_\text{k}}}{ \dfrac {Y_\text{gk`}}{N_\text{k`}}}  &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Gewichtete Mittelwerte aller Expressionsverhältnisse''' können berechnet werden. Einsetzen der in 1. und 2. ermittelten Werte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;math&amp;gt; TMM = 2^{log_2 (TMM_\text{k}^\text{k`})} &amp;lt;/math&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gesamt:''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; log_2 (TMM_\text{k}^\text{k`}) =  \frac{ \underset {g \in G}{\sum}   W_\text{gk}^\text{k´} \cdot M_\text{gk}^\text{k´}} { \sum_{g \in G} W_\text{gk}^\text{k´}} &amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Mittelwerte aller Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Gewichtungsfaktor der Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
G = Set aller Gene&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Bedingungen für dieses Verfahren:''' &amp;lt;br&amp;gt;&lt;br /&gt;
* Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; , Y&amp;lt;sub&amp;gt;gk'&amp;lt;/sub&amp;gt; &amp;gt; 0&lt;br /&gt;
* Die oberen und unteren 30 % der &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} &amp;lt;/math&amp;gt; Werte werden nicht berücksichtigt&lt;br /&gt;
* Die 5 % am höchsten und niedrigsten exprimierten Gene werden nicht berücksichtigt&lt;br /&gt;
&lt;br /&gt;
== Beispielrechnung ==&lt;br /&gt;
 Gen       Zustand 1[bp]         Zustand 2[bp]&lt;br /&gt;
 A         200                   600&lt;br /&gt;
 B         600                   0 &lt;br /&gt;
 C         800                   960&lt;br /&gt;
 D         400                   480&lt;br /&gt;
 &lt;br /&gt;
 Summe     2000                  1680&lt;br /&gt;
&lt;br /&gt;
 Folgende Dinge gelten nun:&lt;br /&gt;
 * TMM braucht immer einen Referenzwert (hier: Zustand 1); Wenn man mehrere Proben hätte, könnte man diese alle an Zustand 1 messen.&lt;br /&gt;
&lt;br /&gt;
 * Zuerst normalisiert man die Counts innerhalb der Probe&lt;br /&gt;
     Ya/N                         Yb/N&amp;lt;br&amp;gt;&lt;br /&gt;
 A   &amp;lt;math&amp;gt;\frac{200}{2000}=0,1&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{240}{1680}=0,143&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt;\frac{600}{2000}=0,3&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{0}{1680}=0&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt;\frac{800}{2000}=0,4&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{960}{1680}=0,571&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt;\frac{400}{2000}=0,2&amp;lt;/math&amp;gt;                 &amp;lt;math&amp;gt;\frac{2480}{1680}=0,286&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 * Mittelwert der Expressionsverhältnisse&lt;br /&gt;
          Ma/b                         &lt;br /&gt;
 A   &amp;lt;math&amp;gt;log_{2} \frac{0,143}{0,1}=0,516&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt;log_{2} \frac{0}{0,3}= -Inf &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt;log_{2} \frac{0,571}{0,4}=0,513&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt;log_{2} \frac{0,286}{0,2}=0,516&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 *'''kleiner Praxistipp von eurem Admin''': &amp;lt;math&amp;gt;log_{2}&amp;lt;/math&amp;gt; ist der Logarithmus von 2, Es ist nicht der natürliche log, es ist nicht ln, es ist nichts mit eulerscher Zahl oder was eure Taschenrechner sonst noch so hergeben. Also sucht eine Funktion, in der ihr die Basis des log eintragen könnt und gebt dort eine 2 ein. &lt;br /&gt;
&lt;br /&gt;
 *Nun kommt der Gewichtungsfaktor ins Spiel&lt;br /&gt;
                Wa/b&lt;br /&gt;
 A   &amp;lt;math&amp;gt; \frac{1680-240}{1680*240} + \frac{2000-200}{2000*200}=0,081&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 B   &amp;lt;math&amp;gt; \frac{1680-0}{1680*0} + \frac{2000-600}{2000*600}= -Inf &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 C   &amp;lt;math&amp;gt; \frac{1680-960}{1680*960} + \frac{2000-800}{2000*800}=0,0012&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 D   &amp;lt;math&amp;gt; \frac{1680-480}{1680*480} + \frac{2000-400}{2000*400}=0,0035&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 '''Summe der Gewichtung 0,0128'''&lt;br /&gt;
&lt;br /&gt;
 *Nun werden die Mittelwerte der Expressionsverhältnisse gewichtet (durch den Gewichtungsfaktor)&lt;br /&gt;
 &lt;br /&gt;
 A   0,516 * 0,081  = 0,0042&lt;br /&gt;
 B   -&lt;br /&gt;
 C   0,513 * 0,0012 = 0,0006&lt;br /&gt;
 D   0,516 * 0,0018 = 0,0018&lt;br /&gt;
 Summe                0,0066&lt;br /&gt;
&lt;br /&gt;
 Nun wird TMM berechnet:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{\text{Summe der gewichteten Mittelwerte der Expressionsverhältnisse}}{\text{Summe Gewichtungsfaktoren}}=log_{2}(TMM)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{0,0066}{0,0128}=0,51=log_{2}(TMM)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 * Jetzt noch die Formel umsetzen:&lt;br /&gt;
 &amp;lt;math&amp;gt;log_{2}(TMM)= x&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2^{x} = TMM &amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2^{0,51} = 1,4296 &amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=793</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=793"/>
		<updated>2021-01-31T19:50:53Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* T */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Lander-Waterman-Modell|Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|Library]]&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#t-Test|Nullhypothese]]&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[7_Multiples_Testen#P-Wert|p-value]]&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNAseq|RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[6_Normalisierungen#RPKM|RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3_Alignments#Smith-Waterman_Algorithmus|Smith-Waterman Algorithmus]]&lt;br /&gt;
&lt;br /&gt;
== T ==&lt;br /&gt;
[[7_Multiples_Testen#t-Test|t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[6_Normalisierungen#TMM|TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[6_Normalisierungen#TPM|TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=792</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=792"/>
		<updated>2021-01-31T19:48:19Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* S */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Lander-Waterman-Modell|Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|Library]]&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#t-Test|Nullhypothese]]&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[7_Multiples_Testen#P-Wert|p-value]]&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNAseq|RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[6_Normalisierungen#RPKM|RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3_Alignments#Smith-Waterman_Algorithmus|Smith-Waterman Algorithmus]]&lt;br /&gt;
&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=791</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=791"/>
		<updated>2021-01-31T19:46:44Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* R */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Lander-Waterman-Modell|Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|Library]]&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#t-Test|Nullhypothese]]&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[7_Multiples_Testen#P-Wert|p-value]]&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNAseq|RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[6_Normalisierungen#RPKM|RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=790</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=790"/>
		<updated>2021-01-31T19:44:58Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Lander-Waterman-Modell|Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|Library]]&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#t-Test|Nullhypothese]]&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[7_Multiples_Testen#P-Wert|p-value]]&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=789</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=789"/>
		<updated>2021-01-31T19:44:30Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* N */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Lander-Waterman-Modell|Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|Library]]&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#t-Test|Nullhypothese]]&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=788</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=788"/>
		<updated>2021-01-31T19:40:48Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* M */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Lander-Waterman-Modell|Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|Library]]&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=787</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=787"/>
		<updated>2021-01-31T19:40:01Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* L */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Lander-Waterman-Modell|Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2.Transkriptom_RNA_Seq_1#Aufgabe_1:_Definitionen|Library]]&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=786</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=786"/>
		<updated>2021-01-31T19:38:52Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* I */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Illumina_Sequencing_.282nd_Generation_Sequencing.29|Illumina]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=785</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=785"/>
		<updated>2021-01-31T19:38:22Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* G */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|gap penalty]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[Illumina]]&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=784</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=784"/>
		<updated>2021-01-31T19:37:02Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* F */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[1_Datenbanken#FASTA|FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#FASTQ|FASTQ-Format]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
[[gap penalty]]&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[Illumina]]&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=783</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=783"/>
		<updated>2021-01-31T19:35:37Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* D */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Dynamic programming]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[FASTQ-Format]]&lt;br /&gt;
== G ==&lt;br /&gt;
[[gap penalty]]&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[Illumina]]&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=782</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=782"/>
		<updated>2021-01-31T19:33:43Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Sequenzabdeckung|Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[Dynamic programming]]&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[FASTQ-Format]]&lt;br /&gt;
== G ==&lt;br /&gt;
[[gap penalty]]&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[Illumina]]&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=781</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=781"/>
		<updated>2021-01-31T19:30:41Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* B */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_2:_Benjamini-Hochberg-Prozedur|Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[7_Multiples_Testen#L.C3.B6sung_1:_Bonferroni-Korrektur|Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[4.Burrows-Wheeler|Burrows-Wheeler Transformation]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
[[Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[Dynamic programming]]&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[FASTQ-Format]]&lt;br /&gt;
== G ==&lt;br /&gt;
[[gap penalty]]&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[Illumina]]&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=780</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=780"/>
		<updated>2021-01-31T19:28:26Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[3_Alignments#Alignments|Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[3.Smith-Waterman#Aufgabe_1:_Definitionen|Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[2_Transkriptom_RNA_Seq_1#Assemblierung_der_reads|Assembly]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
[[Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Burrows-Wheeler Transformation]]&lt;br /&gt;
== C ==&lt;br /&gt;
[[Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[Dynamic programming]]&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[FASTQ-Format]]&lt;br /&gt;
== G ==&lt;br /&gt;
[[gap penalty]]&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[Illumina]]&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Smith-Waterman&amp;diff=779</id>
		<title>3.Smith-Waterman</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=3.Smith-Waterman&amp;diff=779"/>
		<updated>2021-01-31T19:26:39Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Aufgabe 1: Definitionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Aufgabe 1: Definitionen ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Definiere die folgenden Begriffe:&lt;br /&gt;
&lt;br /&gt;
* '''Alignment''': Methode, bei der verschiedene Sequenzen optimal aneinander ausgerichtet werden, um übereinstimmende Teile untereinander sichtbar zu machen. Die kann entweder zwischen einem Read und einem Referenzgenom passieren oder zwischen zwei Reads im Zuge der RNAseq. &lt;br /&gt;
&lt;br /&gt;
* '''Dynamic Programming''': Algorithmus zum Lösen von informatischen Problemen. Dabei wird ein Problem in Teilprobleme unterteilt, die nach und nach gelöst und gespeichert werden. Die kann auf Assemblies angewandt werden, indem man die reads nach und nach aneinanderfügt, anstatt dies in einem einzigen Programmschritt durchzuführen. Dabei wird stets ein Paar mit maximalem Match verbunden bevor das nächste Paar verwendet wird. &lt;br /&gt;
&lt;br /&gt;
* '''lokales Alignment''': Alignment von zwei (Teil)-Sequenzen, wird mit dem Smith-Waterman-Algorithmus durchgeführt. Zur Berechnung müssen die Teilsequenzen gefunden werden, die den höchsten Alignmentscore besitzen. &lt;br /&gt;
&lt;br /&gt;
* '''Gap penalty''': Bewertung von Lücken, die in ein Alignment eingefügt wurden. Als Folge ein Abzug im Alignmentscore, wenn bei einem lokalen Alignment eine Base ungepaart ist (Das Beispiel hat an Position 3 ein Gap und somit eine Gap penalty. &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
 AATTGGCC&lt;br /&gt;
 TT-AACCGG&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
*'''Algorithmus''': Verarbeitungsvorschfrift, die aus einer endlichen Folge von eindeutig ausführbaren Anweisungen besteht, mit der man eine Vielzahl gleichartiger Probleme lösen kann. Alternative Definition: Handlungsanweisung zur Lösung eines Problems, besteht aus definierten, sequentiellen Abschnitten.&lt;br /&gt;
&lt;br /&gt;
* '''Fasta-Format''': textbasiertes Format in dem DNA, RNA und '''Protein'''sequenzen gespeichert werden. Besteht aus 2-3 Zeilen pro Sequenz. Die erste Zeile besteht aus einem Header, der mit &amp;gt; beginnt und Namen und Beschreibung der Sequenz beinhaltet. Danach folgt eine optinale Kommentarzeile, gefolgt von der Zeile mit der eigentlichen Sequenz. Mehrere Sequenzen können in einer Datei gespeichert werden, wenn man einen neuen Header für jede Sequenz beginnt. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 &amp;gt;Probesequenz_1_20190502_ABC&lt;br /&gt;
 AATTAAGCATAAATAGGCTAGCTAAGCTAGCCA&lt;br /&gt;
 &amp;gt;Probesequenz_2_20190502_ABC&lt;br /&gt;
 GGGATTCGACCGATCGAAGCTTAGCGAACGAGA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''b''': Welche grundsätzlichen Arten von Alignment gibt es?&lt;br /&gt;
&lt;br /&gt;
Lokales Alignment: Alignment von unterschiedlichen (Teil)-Sequenzen, normalerweise unter der Verwendung des Smith-Waterman-Algorithmuses. Wird mit längeren Teilsequenzen immer aufwändiger.&lt;br /&gt;
&lt;br /&gt;
Globales Alignment: Volle Sequenzen werden miteinander alignt. Wird oftmals mit dem Needleman-Wunsch Algorithmus bearbeitet.&lt;br /&gt;
&lt;br /&gt;
 Globales Alignment: Vergleich von Gesamtsequenzen&lt;br /&gt;
 Lokales Alignment: Vergleich von Teilsequenzen&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 2: Smith-Waterman ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Erkläre welche Funktion der Smith-Waterman-Algorithmus hat und wie er funktioniert.&lt;br /&gt;
&lt;br /&gt;
Der Smith-Waterman Algorithmus wird verwendet um lokale Alignments zu finden.&lt;br /&gt;
&lt;br /&gt;
Berechnet wird es mit folgender Matrix: &lt;br /&gt;
&lt;br /&gt;
[[file:Smith_Waterman_Algorithmus.jpg|center|frameless|500px]]&lt;br /&gt;
&lt;br /&gt;
Erklärt bedeutet dies, das eine Matrix aufgespannt wird mit der Größe Länge von Sequenz A x Länge der Sequenz B, so repräsentiert jede Zelle in der Matrix eine Kombination von einer Base aus Sequenz A und einer Base aus Sequenz B und kann somit als Match oder Mismatch identifiziert werden. &lt;br /&gt;
Eine Zahlenbewertung (Score) für Match, Mismatch und Gap muss vorgegeben werden.&lt;br /&gt;
Für jede Zelle der Matrix wird ein Wert berechnet, angefangen oben links und beendet unten rechts in der Matrix. &lt;br /&gt;
Der Wert für eine bestimmte Zelle ist der höchste Wert aus den folgenden 4:&lt;br /&gt;
&lt;br /&gt;
* Der höchste Wert für die Zelle links oben  diagonal (oder 0 falls dies außerhalb der Matrix liegt) plus den Score der Zelle (Match oder Mismatch).&lt;br /&gt;
&lt;br /&gt;
* Der höchste Wert aus der Zelle links daneben plus den Score für einen Gap.&lt;br /&gt;
&lt;br /&gt;
* Der höchste Wert aus Zelle oberhalb plus den Score für einen Gap.&lt;br /&gt;
&lt;br /&gt;
* Null&lt;br /&gt;
&lt;br /&gt;
Die Matrix wird berechnet bis alle Werte bestimmt sind. Dann wird der höchste Wert der gesamten Matrix gesucht. Von diesem Punkt beginnt das Alignment. Von dort aus wird rückwärts die Sequenz bestimmt, indem die Rechnung rückwärts verfolgt wird. Der nächste Sequenzteil ist dann jeweils immer die Zelle von der aus man den höchsten Wert berechnet hat. Sobald man jedoch nach links oder nach oben geht anstatt diagonal zu gehen, muss man beachten dass man hierbei ein Gap in das Alignment einbaut und dies auch so aufschreiben muss.&lt;br /&gt;
&lt;br /&gt;
Zuerst berechnet man jede Zelle der Matrix, dann findet man das Aligment&lt;br /&gt;
[[File:Matrix berechnen.png|left|frameless|340px]]&lt;br /&gt;
[[File:Alignment finden.png|right|frameless|340px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b''': Wo in der Smith-Waterman-Matrix beginnt und endet das optimale Alignment?&lt;br /&gt;
&lt;br /&gt;
Das optimale Alignment beginnt bei den höchsten Wert, folgt dann dem Berechnungsstrang bis das erste Mal auf eine 0 getroffen wird. Dort bricht das Alignment ab. &lt;br /&gt;
&lt;br /&gt;
'''c''': Welche Alignment-Art wird durch den Smith-Waterman Algorithmus bestimmt?&lt;br /&gt;
&lt;br /&gt;
Mit dem Algorithmus wird ein lokales Alignment bestimmt.&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 3: lokales Alignment ==&lt;br /&gt;
&lt;br /&gt;
Führe ein Alignment der folgenden Sequenzen durch: GCDGC GDG&lt;br /&gt;
&lt;br /&gt;
Verwende den Ähnlichkeitsscore S: Match = 3 | Mismatch = -2 | Gap = -4&lt;br /&gt;
&lt;br /&gt;
Berechne für die beiden Sequenzen ein optimales lokales Alignment nach Smith-Waterman mit den gleichen Bedingungen.&lt;br /&gt;
Welches optimale lokale Alignment ergibt sich?&lt;br /&gt;
Rechts ist die Lösungsmatrix dargestellt, der Score des Alignments ist 6.&lt;br /&gt;
[[File:Smith waterman2.png|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 4: Alignment ==&lt;br /&gt;
&lt;br /&gt;
Während deiner Bachelorarbeit sollst du ein Protein, das du gerade versuchst zu&lt;br /&gt;
charakterisieren, in einen groben Kontext bringen. Leider weißt du noch nicht viel über das&lt;br /&gt;
Protein.&lt;br /&gt;
Daher ist dein erster Schritt, gemeinsame Domänen zwischen den Proteinen zu finden.&lt;br /&gt;
Für das Protein hat sich folgende Sequenz ergeben: DDCGDC&lt;br /&gt;
&lt;br /&gt;
Durch einen Abgleich der Sequenz mit einer Datenbank kann die Sequenz mit anderen&lt;br /&gt;
Sequenzen verglichen und ein optimales Alignment gefunden werden.&lt;br /&gt;
Wieso eignet sich hier der Smith-Waterman Algorithmus?&lt;br /&gt;
Führe ein Alignment zwischen der oben ermittelten Sequenz und der folgenden durch:&lt;br /&gt;
DGGD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ähnlichkeitsscore S: match = 3 | mismatch = -1 | gap penalty = -4&lt;br /&gt;
&lt;br /&gt;
Smith-Waterman nutzt man für lokale Alignments, hier ist dies nützlich da wir Ausschnitte aus zwei funktionell ähnlichen Domänen vergleichen.&lt;br /&gt;
&lt;br /&gt;
[[File:Smith waterman3.png|frameless|400px|center]]&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 5: Lander-Waterman-Modell ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Was sagt das Lander-Waterman-Modell aus? Benne die darauf beruhende Formel&lt;br /&gt;
sowie ihre Bestandteile.&lt;br /&gt;
&lt;br /&gt;
Mit dem Lander-Waterman-Modell kann man berechnen wie viele Gaps in einem Alignment zu erwarten sind.&lt;br /&gt;
&lt;br /&gt;
Die Formel zur Berechung lautet: P(nicht abgedecktes bp)= &amp;lt;math&amp;gt;e^{-C} &amp;lt;/math&amp;gt; wobei &amp;lt;math&amp;gt; C= \frac{N*L}{G} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist C die Coverage, die sich aus der Anzahl der reads N, der durchschnittlichen readlänge L und der Templatesequenz G berechnet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Suche im Internet die Länge des menschlichen Genoms heraus. Verwende dafür folgende&lt;br /&gt;
Internetseite: https://www.ncbi.nlm.nih.gov/&lt;br /&gt;
&lt;br /&gt;
Wie viele Reads müssen sequenziert werden, um das humane Genom mit einer&lt;br /&gt;
Coverage von 30 abzudecken? Gehe hierfür von einer durchschnittlichen Read Länge&lt;br /&gt;
von 600 bp aus. &lt;br /&gt;
&lt;br /&gt;
Je nach gefundenem Wert für die Genomlänge, die ja nach Genotyp variiert hat man leicht unterschiedliche Werte.&lt;br /&gt;
&lt;br /&gt;
Coverage &amp;lt;math&amp;gt;&lt;br /&gt;
       C = 30 = \frac{N*600}{3257320000}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  N = 162866000 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c''': Wie hoch ist die Häufigkeit nicht abgedeckter bp bei einer Coverage von 40?&lt;br /&gt;
&lt;br /&gt;
Hier können wir das Lander-Waterman-Modell anwenden: &lt;br /&gt;
&amp;lt;math&amp;gt; P=e^{-C} = e^{-40} = 4,24835*10^{-18}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''d''': Wie müsste die Anzahl der Reads gewählt werden, sodass eine möglichst komplette&lt;br /&gt;
Übersicht über die Genomsequenz erhalten wird?&lt;br /&gt;
&lt;br /&gt;
Generell gilt, dass je mehr reads desto geringer die Wahrscheinlichkeit dass Gaps autreten. Jedoch verlängert sich damit die Dauer der Sequenzierung auch. Man kann die Lander-Waterman-Formel umstellen um zu berechnen welche Coverage man braucht um nur ein Contig zu haben &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; -C=\ln(\frac{1}{3257320000})=-21,904 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es würde also eine Coverage von über 21 gebraucht werden um statistisch gesehen keine Gaps mehr zu erwarten.&lt;br /&gt;
[[File:LWM.png|frameless|center]]&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=778</id>
		<title>Glossar</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=Glossar&amp;diff=778"/>
		<updated>2021-01-31T19:21:01Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A ==&lt;br /&gt;
[[Alignment]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Algorithmus]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Assembly]] &lt;br /&gt;
== B ==&lt;br /&gt;
[[Benjamini-Hochberg-Prozedur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Bonferroni-Korrektur]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Burrows-Wheeler Transformation]]&lt;br /&gt;
== C ==&lt;br /&gt;
[[Contiq]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Coverage]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
[[Dynamic programming]]&lt;br /&gt;
== E ==&lt;br /&gt;
== F ==&lt;br /&gt;
[[FASTA-Format]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[FASTQ-Format]]&lt;br /&gt;
== G ==&lt;br /&gt;
[[gap penalty]]&lt;br /&gt;
== H ==&lt;br /&gt;
== I ==&lt;br /&gt;
[[Illumina]]&lt;br /&gt;
== J ==&lt;br /&gt;
== K ==&lt;br /&gt;
== L ==&lt;br /&gt;
[[Lander-Waterman-Modell]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Library]]&lt;br /&gt;
== M ==&lt;br /&gt;
[[Microarrays]]&lt;br /&gt;
== N ==&lt;br /&gt;
[[NGS]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Nullhypothese]]&lt;br /&gt;
== O ==&lt;br /&gt;
== P ==&lt;br /&gt;
[[p-value]]&lt;br /&gt;
== Q ==&lt;br /&gt;
== R ==&lt;br /&gt;
[[reads]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[RNASeq]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[RPKM]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
[[Scaffold]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Smith-Waterman Algorithmus]]&lt;br /&gt;
== T ==&lt;br /&gt;
[[t-Test]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TMM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[TPM]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Transkriptom]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
== V ==&lt;br /&gt;
== W ==&lt;br /&gt;
== X ==&lt;br /&gt;
== Y ==&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=10.BLAST&amp;diff=777</id>
		<title>10.BLAST</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=10.BLAST&amp;diff=777"/>
		<updated>2021-01-31T19:12:10Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Durchführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlagen ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Was ist BLAST?&lt;br /&gt;
&lt;br /&gt;
*'''B'''asic '''l'''ocal '''a'''lignment '''s'''earch '''t'''ool&lt;br /&gt;
* Schnelle Suche einer Sequenz in einer Sequenzdatenbank&lt;br /&gt;
* Sequenz wird zur Suche in Teilsequenzen zerlegt&lt;br /&gt;
* kann zur Strukur- und Funktionsvorhersage dienen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Auf welchem Prinzip beruht BLAST? Erkläre die Funktionsweise.&lt;br /&gt;
&lt;br /&gt;
''' Er sucht nach homologen Sequenzen in der Datenbank und berechnet zusätzlich eine statistische Signifikanz'''&lt;br /&gt;
&lt;br /&gt;
Die Idee des Algorithmus basiert auf der Wahrscheinlichkeit, dass Alignment mit vielen Treffern auch viele zufällig ausgewählte Stücke von großerer Identität (im Sinne von identisch) besitzen. Diese gefunden Teilstücke werden dann während der Suche nach besseren und längeren Alignments weiter vergrößert.  Indem diese Segmente kurz gehalten werden, ist es möglich, die Abfragesequenz vor einer Suche zu bearbeiten. Dadurch kann eine Tabelle mit möglichen Teilstücken mit ihrem Ursprung in der Orginalsequenz vorgehalten werden. &lt;br /&gt;
&lt;br /&gt;
Dabei stellt der Algorithmus eine Liste aller benachbarten Worte fester Länge auf, die einen Treffer auf der Abfragesequenz mit einem höheren Scoring als ein zu wählender Parameter erzeugen würden. Anschließend wird die Zieldatenbank nach Wörtern in dieser Liste abgefragt und die gefundenen Treffer erweitert, um mögliche maximal zusammenhängende Treffer -in beide Richtungen- zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Ablauf dafür ist:&lt;br /&gt;
&lt;br /&gt;
*1. Die 'query' Sequenz wird in Worte der Länge 'l' zerlegt (l = 3 für Proteine; l = 11 für DNA)&lt;br /&gt;
*2. Für jedes Wort wird eine Liste ähnlicher Wörter (w-mers) mit Score S&amp;gt;Threshold erzeugt (Threshold=13 bei Aminosäuresequenzen; basierend auf der BLOSUM62 Matrix)&lt;br /&gt;
*3. Alle w-mers der Liste werden in der Datenbank gesucht und die Position bestimmt&lt;br /&gt;
*4. Die Treffer werden erweitert, bis der Score kleiner wird&lt;br /&gt;
*5. Ist der Score größer als der cutoff, handelt es sich um ein 'high-scoring-pair' ('''HSP''')&lt;br /&gt;
*6. HSPs werden durch lokales Alignment erweiter (Smith Waterman), der echte Alignment Score wird berechnet. Gaps können nun berücksichtig werden.&lt;br /&gt;
&lt;br /&gt;
[[File:BLOSUM62 MATRIX.png|700px|center|thumb]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c''': Um was für einen Algorithmus handelt es sich bei BLAST? Nenne einen Vor- und einen Nachteil.&lt;br /&gt;
&lt;br /&gt;
*heuristischer Algorithmus&lt;br /&gt;
&lt;br /&gt;
 Vorteil: schnell&lt;br /&gt;
 Nachteil: nichts zwangsläufig das beste Alignment wird gefunden, abhängig von den Eingangsparametern; kann Fusionproteine nicht finden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''d''': Bestimme manuell für die Sequenz 'PRAKTIKA' sämtliche w-mers der Länge 3, die bei Verwendung der BLOSUM62 Matrix einen Score T&amp;gt;13 besitzen.&lt;br /&gt;
&lt;br /&gt;
[[File:BLAST1.jpeg|400px|center|thumb]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Durchführung ==&lt;br /&gt;
Datensatz vom 06/2020&lt;br /&gt;
&lt;br /&gt;
Du erhälst folgende Sequenz:&lt;br /&gt;
&lt;br /&gt;
 MQIELSTCFFLCLLRFCFSATRRYYLGAVELSWDYMQSDLGELPVDARFPPRVPKSFPFNTSVVYKKTLFVE FTDHLFNIAKPRPPWMGLLGPTIQAEVYDTVVITLKNMASHPVSLHAVGVSYWKASEGAEYDDQTSQREK EDDKVFPGGSHTYVWQVLKENGPMASDPLCLTYSYLSHVDLVKDLNSGLIGALLVCREGSLAKEKTQTLH KFILLFAVFDEGKSWHSETKNSLMQDRDAASARAWPKMHTVNGYVNRSLPGLIGCHRKSVYWHVIGMGT TPEVHSIFLEGHTFLVRNHRQASLEISPITFLTAQTLLMDLGQFLLFCHISSHQHDGMEAYVKVDSCPEEPQ LRMKNNEEAEDYDDDLTDSEMDVVRFDDDNSPSFIQIRSVAKKHPKTWVHYIAAEEEDWDYAPLVLAPDD RSYKSQYLNNGPQRIGRKYKKVRFMAYTDETFKTREAIQHESGILGPLLYGEVGDTL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starte nun den BLAST-Server des NCBI. Achte darauf, als Algorithmus unter Program Selection 'blastp (protein-protein BLAST)' auszuwählen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''a''': Gib die Sequenz ein und starte die Suche. Um welches Protein handelt es sich? Welche Domänen enthält es?&lt;br /&gt;
&lt;br /&gt;
 Coagulation faktor VIII (Homo sapiens)&lt;br /&gt;
 Domäne: Cupredoxin 1,2,3 und Multicopper Oxi- dase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Suche nun in einer geeigneten Datenbank nach dem Protein. (Uniprot)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Welche molekulare Funktion hat das Protein und an welchen biologischen Prozessen ist es beteiligt? An welcher Krankheit ist es beteiligt?&lt;br /&gt;
&lt;br /&gt;
Molekulare Funktion: Kupferion- bindend und besitzt eine Oxidoreduktase Aktivität.&lt;br /&gt;
 '''Biologische Prozesse:'''&lt;br /&gt;
 Akute-Phase-Antwort: eine akute entzündliche Reaktion, die nicht Antikörperproteine beinhaltet. Deren Konzentration steigt aufgrund einer Verletzung oder Infektion an&lt;br /&gt;
 Blutgerinnung&lt;br /&gt;
 Aktivierung der Blutplättchen ( bei Blutgerinnung)&lt;br /&gt;
 Vesikel Ummantelung&lt;br /&gt;
 Transport: Endoplasmatisches Retikulum zum Golgi&lt;br /&gt;
&lt;br /&gt;
 '''Krankheit:''' &lt;br /&gt;
 Hämophilie A (häufige, rezessive X-chromosomale Koagulationsstörung)&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=11.BLAST_II&amp;diff=776</id>
		<title>11.BLAST II</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=11.BLAST_II&amp;diff=776"/>
		<updated>2021-01-31T19:11:37Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Durchführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenanalyse ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''a''': Was ist das Problem bei der Bewertung von BLAST Ergebnissen?&lt;br /&gt;
&lt;br /&gt;
*Der Score hängt auch von der Sequenzlänge, der Substitutionsmatrix und gap penalty ab und kann deshalb nicht direkt verglichen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Was ist der Bit-Score und wie wird er berechnet?&lt;br /&gt;
&lt;br /&gt;
*log_2 skalierte Version des normalisierten Scores&lt;br /&gt;
*Durch folgende Formel berechnet:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; S' = \frac{\lambda S-ln(k)}{ln(2)}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
λ und k sind Karlin-Altschul-Paramter und ergeben sich aus der Scoring-Funktion.&lt;br /&gt;
&lt;br /&gt;
'''c''': Wie ist der Suchraum definiert? In welchem Zusammenhang steht dieser mit dem Bit-Score?&lt;br /&gt;
Der Suchraum N ist durch folgende Formel definiert: &lt;br /&gt;
&lt;br /&gt;
 N = n * m &lt;br /&gt;
&lt;br /&gt;
 n = Länge der ’query’ Sequenz und m = Länge der Datenbank&lt;br /&gt;
*Der Bit-Score beschreibt die Größe des Suchraums, der zufällig einen Treffer mit gleichem oder besseren   Bit- Score enthält.&lt;br /&gt;
&lt;br /&gt;
'''d''': Was gibt der e-value an und wie wird er berechnet? Sind e-values, die an verschiedenen Tagen errechnet wurden, vergleichbar?&lt;br /&gt;
&lt;br /&gt;
*Der e-value oder expectation value korrigiert den P-Value für einen Suchraum der Größe N. Es ist die Wahrscheinlichkeit, dass ein Ereignis im Suchraum N durch Zufall eintritt.&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;P = {2^{-S'}}       E = \frac{ N}{2^{S'}} = \frac{ m*n}{2^{S'}}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*An verschiedenen Zeitpunkten berechnete e-values sind nicht vergleichbar, weil die Größe der Datenbank m an verschiedenen Zetipunkten unterschiedlich sein kann. Die Wahrscheinlichkeit für einen Zufallstreffer ist umso höher, je größer die Datenbank war, in der der e-Value bestimmt wurde.&lt;br /&gt;
&lt;br /&gt;
== Durchführung ==&lt;br /&gt;
Datensatz vom 06/2020&lt;br /&gt;
&lt;br /&gt;
Du erhältst folgende Sequenz:&lt;br /&gt;
&lt;br /&gt;
 MSKTQEFRPLTLPPKLSLSDFNEFIQDIIRIVGSENVEVISSKDQIVDGSYMKPTHTHDPHHVMDQDYFLAS AIVAPRNVADVQSIVGLANKFSFPLWPISIGRNSGYGGAAPRVSGSVVLDMGKNMNRVLEVNVEGAYCVV EPGVTYHDLHNYLEANNLRDKLWLDVPDLGGGSVLGNVERGVGYTLFPYGFGPYIDGLFSQSNMGIVTK IGIWLMPNPRGYQSYLITLPKDGDLKQAVDIIRPLRLGMALQNVPTIRHILLDAAVLGDKRSYSSRTEPLSD EELDKIAKQLNLGRWNFYGALYGPEPIRRVLWETIKDAFSAIPGVKFYFPEDTPENSVLRVRDKTMQGIPT YDELKWIDWLPNGAHLFFSPIAKVSGEDAMMQYAVTKKRCQEAGLDFIGTFTVGMREMHHIVCIVFNKKDLIQ&lt;br /&gt;
&lt;br /&gt;
Starte nun den BLAST-Server des NCBI. Achte darauf, als Algorithmus unter Program Selection „ blastp (protein-protein BLAST)“ auszuwählen.&lt;br /&gt;
&lt;br /&gt;
'''a''': Gib die Sequenz ein und starte die Suche. Um welches Protein handelt es sich? &lt;br /&gt;
 Vanillyl-alcohol Oxidase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Wie hoch sind der e-value und der bit-score? Was bedeutet dieser e-value? Wie groß wäre der hier benötigte Suchraum um einen zufälligen Treffer mit diesem score zu finden?&lt;br /&gt;
&lt;br /&gt;
*e-value geht gegen 0 → Wahrscheinlichkeit, dass das Ergebnis durch Zufall gefunden wurde. Da der Wert so klein ist, ist die Irrtumswahrscheinlichkeit minimal.&lt;br /&gt;
*bit-Score=852&lt;br /&gt;
*Suchraum= N = 2^{852} =3.003 * 10^{256}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c''': Welche Parameter sind außerdem signifikant?&lt;br /&gt;
&lt;br /&gt;
*Die Abdeckung: Anteil der Aminosäuren der ’query’ Sequenz, die beim Vergleich abgedeckt wurden&lt;br /&gt;
&lt;br /&gt;
*Identität: Anteil der verglichenen Aminosäuren, die tatsächlich identisch sind&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starte eine neue Suche. Wähle in dem eingeklappten Menü „Algorithm parameters“ im Bereich „Scoring parameters“ unter „Compositional adjustments“ die Einstellung „No adjustment“ aus. Führe nun BLAST nacheinander mit der BLOSUM80-Matrix und der BLOSUM45-Matrix aus. Speichere den Anfang der jeweiligen Tabelle und vergleiche die Ergebnisse.&lt;br /&gt;
&lt;br /&gt;
'''d''': Wie unterscheiden sich die Parameter?&lt;br /&gt;
&lt;br /&gt;
*BLOSUM 45: Niedrigerer Score, Höherer e-value (untere Tabelle)&lt;br /&gt;
*BLOSUM 80: Höherer Score und niedrigerer e-value bei BLOSUM 80; insgesamt weniger Ergebnisse (obere Tabelle) &lt;br /&gt;
&lt;br /&gt;
 Die Erstellung von BLOSUM X basiert auf dem Sequenzvergleich von solchen Sequenzen, die zu mind. X% verwandt sind. Bei BLOSUM80 wurden also näherverwandte Sequenzen verglichen als bei BLOSUM45, weswegen höhere Scores in der Diagonalen vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
[[File:BLAST2.jpeg|600px|center|thumb]]&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=11.BLAST_II&amp;diff=775</id>
		<title>11.BLAST II</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=11.BLAST_II&amp;diff=775"/>
		<updated>2021-01-31T19:09:37Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Durchführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenanalyse ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''a''': Was ist das Problem bei der Bewertung von BLAST Ergebnissen?&lt;br /&gt;
&lt;br /&gt;
*Der Score hängt auch von der Sequenzlänge, der Substitutionsmatrix und gap penalty ab und kann deshalb nicht direkt verglichen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Was ist der Bit-Score und wie wird er berechnet?&lt;br /&gt;
&lt;br /&gt;
*log_2 skalierte Version des normalisierten Scores&lt;br /&gt;
*Durch folgende Formel berechnet:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; S' = \frac{\lambda S-ln(k)}{ln(2)}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
λ und k sind Karlin-Altschul-Paramter und ergeben sich aus der Scoring-Funktion.&lt;br /&gt;
&lt;br /&gt;
'''c''': Wie ist der Suchraum definiert? In welchem Zusammenhang steht dieser mit dem Bit-Score?&lt;br /&gt;
Der Suchraum N ist durch folgende Formel definiert: &lt;br /&gt;
&lt;br /&gt;
 N = n * m &lt;br /&gt;
&lt;br /&gt;
 n = Länge der ’query’ Sequenz und m = Länge der Datenbank&lt;br /&gt;
*Der Bit-Score beschreibt die Größe des Suchraums, der zufällig einen Treffer mit gleichem oder besseren   Bit- Score enthält.&lt;br /&gt;
&lt;br /&gt;
'''d''': Was gibt der e-value an und wie wird er berechnet? Sind e-values, die an verschiedenen Tagen errechnet wurden, vergleichbar?&lt;br /&gt;
&lt;br /&gt;
*Der e-value oder expectation value korrigiert den P-Value für einen Suchraum der Größe N. Es ist die Wahrscheinlichkeit, dass ein Ereignis im Suchraum N durch Zufall eintritt.&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;P = {2^{-S'}}       E = \frac{ N}{2^{S'}} = \frac{ m*n}{2^{S'}}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*An verschiedenen Zeitpunkten berechnete e-values sind nicht vergleichbar, weil die Größe der Datenbank m an verschiedenen Zetipunkten unterschiedlich sein kann. Die Wahrscheinlichkeit für einen Zufallstreffer ist umso höher, je größer die Datenbank war, in der der e-Value bestimmt wurde.&lt;br /&gt;
&lt;br /&gt;
== Durchführung ==&lt;br /&gt;
&lt;br /&gt;
Du erhältst folgende Sequenz:&lt;br /&gt;
&lt;br /&gt;
 MSKTQEFRPLTLPPKLSLSDFNEFIQDIIRIVGSENVEVISSKDQIVDGSYMKPTHTHDPHHVMDQDYFLAS AIVAPRNVADVQSIVGLANKFSFPLWPISIGRNSGYGGAAPRVSGSVVLDMGKNMNRVLEVNVEGAYCVV EPGVTYHDLHNYLEANNLRDKLWLDVPDLGGGSVLGNVERGVGYTLFPYGFGPYIDGLFSQSNMGIVTK IGIWLMPNPRGYQSYLITLPKDGDLKQAVDIIRPLRLGMALQNVPTIRHILLDAAVLGDKRSYSSRTEPLSD EELDKIAKQLNLGRWNFYGALYGPEPIRRVLWETIKDAFSAIPGVKFYFPEDTPENSVLRVRDKTMQGIPT YDELKWIDWLPNGAHLFFSPIAKVSGEDAMMQYAVTKKRCQEAGLDFIGTFTVGMREMHHIVCIVFNKKDLIQ&lt;br /&gt;
&lt;br /&gt;
Starte nun den BLAST-Server des NCBI. Achte darauf, als Algorithmus unter Program Selection „ blastp (protein-protein BLAST)“ auszuwählen.&lt;br /&gt;
&lt;br /&gt;
'''a''': Gib die Sequenz ein und starte die Suche. Um welches Protein handelt es sich? &lt;br /&gt;
 Vanillyl-alcohol Oxidase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Wie hoch sind der e-value und der bit-score? Was bedeutet dieser e-value? Wie groß wäre der hier benötigte Suchraum um einen zufälligen Treffer mit diesem score zu finden?&lt;br /&gt;
&lt;br /&gt;
*e-value geht gegen 0 → Wahrscheinlichkeit, dass das Ergebnis durch Zufall gefunden wurde. Da der Wert so klein ist, ist die Irrtumswahrscheinlichkeit minimal.&lt;br /&gt;
*bit-Score=852&lt;br /&gt;
*Suchraum= N = 2^{852} =3.003 * 10^{256}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c''': Welche Parameter sind außerdem signifikant?&lt;br /&gt;
&lt;br /&gt;
*Die Abdeckung: Anteil der Aminosäuren der ’query’ Sequenz, die beim Vergleich abgedeckt wurden&lt;br /&gt;
&lt;br /&gt;
*Identität: Anteil der verglichenen Aminosäuren, die tatsächlich identisch sind&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starte eine neue Suche. Wähle in dem eingeklappten Menü „Algorithm parameters“ im Bereich „Scoring parameters“ unter „Compositional adjustments“ die Einstellung „No adjustment“ aus. Führe nun BLAST nacheinander mit der BLOSUM80-Matrix und der BLOSUM45-Matrix aus. Speichere den Anfang der jeweiligen Tabelle und vergleiche die Ergebnisse.&lt;br /&gt;
&lt;br /&gt;
'''d''': Wie unterscheiden sich die Parameter?&lt;br /&gt;
&lt;br /&gt;
*BLOSUM 45: Niedrigerer Score, Höherer e-value (untere Tabelle)&lt;br /&gt;
*BLOSUM 80: Höherer Score und niedrigerer e-value bei BLOSUM 80; insgesamt weniger Ergebnisse (obere Tabelle) &lt;br /&gt;
&lt;br /&gt;
 Die Erstellung von BLOSUM X basiert auf dem Sequenzvergleich von solchen Sequenzen, die zu mind. X% verwandt sind. Bei BLOSUM80 wurden also näherverwandte Sequenzen verglichen als bei BLOSUM45, weswegen höhere Scores in der Diagonalen vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
[[File:BLAST2.jpeg|600px|center|thumb]]&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=11.BLAST_II&amp;diff=774</id>
		<title>11.BLAST II</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=11.BLAST_II&amp;diff=774"/>
		<updated>2021-01-31T19:02:59Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Datenanalyse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenanalyse ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''a''': Was ist das Problem bei der Bewertung von BLAST Ergebnissen?&lt;br /&gt;
&lt;br /&gt;
*Der Score hängt auch von der Sequenzlänge, der Substitutionsmatrix und gap penalty ab und kann deshalb nicht direkt verglichen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Was ist der Bit-Score und wie wird er berechnet?&lt;br /&gt;
&lt;br /&gt;
*log_2 skalierte Version des normalisierten Scores&lt;br /&gt;
*Durch folgende Formel berechnet:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt; S' = \frac{\lambda S-ln(k)}{ln(2)}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
λ und k sind Karlin-Altschul-Paramter und ergeben sich aus der Scoring-Funktion.&lt;br /&gt;
&lt;br /&gt;
'''c''': Wie ist der Suchraum definiert? In welchem Zusammenhang steht dieser mit dem Bit-Score?&lt;br /&gt;
Der Suchraum N ist durch folgende Formel definiert: &lt;br /&gt;
&lt;br /&gt;
 N = n * m &lt;br /&gt;
&lt;br /&gt;
 n = Länge der ’query’ Sequenz und m = Länge der Datenbank&lt;br /&gt;
*Der Bit-Score beschreibt die Größe des Suchraums, der zufällig einen Treffer mit gleichem oder besseren   Bit- Score enthält.&lt;br /&gt;
&lt;br /&gt;
'''d''': Was gibt der e-value an und wie wird er berechnet? Sind e-values, die an verschiedenen Tagen errechnet wurden, vergleichbar?&lt;br /&gt;
&lt;br /&gt;
*Der e-value oder expectation value korrigiert den P-Value für einen Suchraum der Größe N. Es ist die Wahrscheinlichkeit, dass ein Ereignis im Suchraum N durch Zufall eintritt.&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;P = {2^{-S'}}       E = \frac{ N}{2^{S'}} = \frac{ m*n}{2^{S'}}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*An verschiedenen Zeitpunkten berechnete e-values sind nicht vergleichbar, weil die Größe der Datenbank m an verschiedenen Zetipunkten unterschiedlich sein kann. Die Wahrscheinlichkeit für einen Zufallstreffer ist umso höher, je größer die Datenbank war, in der der e-Value bestimmt wurde.&lt;br /&gt;
&lt;br /&gt;
== Durchführung ==&lt;br /&gt;
&lt;br /&gt;
Du erhältst folgende Sequenz:&lt;br /&gt;
&lt;br /&gt;
 MSKTQEFRPLTLPPKLSLSDFNEFIQDIIRIVGSENVEVISSKDQIVDGSYMKPTHTHDPHHVMDQDYFLAS AIVAPRNVADVQSIVGLANKFSFPLWPISIGRNSGYGGAAPRVSGSVVLDMGKNMNRVLEVNVEGAYCVV EPGVTYHDLHNYLEANNLRDKLWLDVPDLGGGSVLGNVERGVGYTLFPYGFGPYIDGLFSQSNMGIVTK IGIWLMPNPRGYQSYLITLPKDGDLKQAVDIIRPLRLGMALQNVPTIRHILLDAAVLGDKRSYSSRTEPLSD EELDKIAKQLNLGRWNFYGALYGPEPIRRVLWETIKDAFSAIPGVKFYFPEDTPENSVLRVRDKTMQGIPT YDELKWIDWLPNGAHLFFSPIAKVSGEDAMMQYAVTKKRCQEAGLDFIGTFTVGMREMHHIVCIVFNKKDLIQ&lt;br /&gt;
&lt;br /&gt;
Starte nun den BLAST-Server des NCBI. Achte darauf, als Algorithmus unter Program Selection „ blastp (protein-protein BLAST)“ auszuwählen.&lt;br /&gt;
&lt;br /&gt;
'''a''': Gib die Sequenz ein und starte die Suche. Um welches Protein handelt es sich? &lt;br /&gt;
 Vanillyl-alcohol Oxidase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Wie hoch sind der e-value und der bit-score? Was bedeutet dieser e-value? Wie groß wäre der hier benötigte Suchraum um einen zufälligen Treffer mit diesem score zu finden?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
e-value geht gegen 0 &lt;br /&gt;
*Wahrscheinlichkeit, dass das Ergebnis durch Zufall gefunden wurde. Da der Wert so klein ist, ist die Irrtumswahrscheinlichkeit minimal.&lt;br /&gt;
&lt;br /&gt;
 bit-Score=852&lt;br /&gt;
 Suchraum= N = 2^852 =3.003 * 10^256&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c''': Welche Parameter sind außerdem signifikant?&lt;br /&gt;
&lt;br /&gt;
*Die Abdeckung: Anteil der Aminosäuren der ’query’ Sequenz, die beim Vergleich abgedeckt wurden&lt;br /&gt;
&lt;br /&gt;
*Identität: Anteil der verglichenen Aminosäuren, die tatsächlich identisch sind&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starte eine neue Suche. Wähle in dem eingeklappten Menü „Algorithm parameters“ im Bereich „Scoring parameters“ unter „Compositional adjustments“ die Einstellung „No adjustment“ aus. Führe nun BLAST nacheinander mit der BLOSUM80-Matrix und der BLOSUM45-Matrix aus. Speichere den Anfang der jeweiligen Tabelle und vergleiche die Ergebnisse.&lt;br /&gt;
&lt;br /&gt;
'''d''': Wie unterscheiden sich die Parameter?&lt;br /&gt;
&lt;br /&gt;
*BLOSUM 45: Niedrigerer Score, Höherer e-value (untere Tabelle)&lt;br /&gt;
*BLOSUM 80: Höherer Score und niedrigerer e-value bei BLOSUM 80; insgesamt weniger Ergebnisse (obere Tabelle) &lt;br /&gt;
&lt;br /&gt;
 Die Erstellung von BLOSUM X basiert auf dem Sequenzvergleich von solchen Sequenzen, die zu mind. X% verwandt sind. Bei BLOSUM80 wurden also näherverwandte Sequenzen verglichen als bei BLOSUM45, weswegen höhere Scores in der Diagonalen vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
[[File:BLAST2.jpeg|600px|center|thumb]]&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=10.BLAST&amp;diff=773</id>
		<title>10.BLAST</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=10.BLAST&amp;diff=773"/>
		<updated>2021-01-31T18:58:46Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Durchführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlagen ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Was ist BLAST?&lt;br /&gt;
&lt;br /&gt;
*'''B'''asic '''l'''ocal '''a'''lignment '''s'''earch '''t'''ool&lt;br /&gt;
* Schnelle Suche einer Sequenz in einer Sequenzdatenbank&lt;br /&gt;
* Sequenz wird zur Suche in Teilsequenzen zerlegt&lt;br /&gt;
* kann zur Strukur- und Funktionsvorhersage dienen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Auf welchem Prinzip beruht BLAST? Erkläre die Funktionsweise.&lt;br /&gt;
&lt;br /&gt;
''' Er sucht nach homologen Sequenzen in der Datenbank und berechnet zusätzlich eine statistische Signifikanz'''&lt;br /&gt;
&lt;br /&gt;
Die Idee des Algorithmus basiert auf der Wahrscheinlichkeit, dass Alignment mit vielen Treffern auch viele zufällig ausgewählte Stücke von großerer Identität (im Sinne von identisch) besitzen. Diese gefunden Teilstücke werden dann während der Suche nach besseren und längeren Alignments weiter vergrößert.  Indem diese Segmente kurz gehalten werden, ist es möglich, die Abfragesequenz vor einer Suche zu bearbeiten. Dadurch kann eine Tabelle mit möglichen Teilstücken mit ihrem Ursprung in der Orginalsequenz vorgehalten werden. &lt;br /&gt;
&lt;br /&gt;
Dabei stellt der Algorithmus eine Liste aller benachbarten Worte fester Länge auf, die einen Treffer auf der Abfragesequenz mit einem höheren Scoring als ein zu wählender Parameter erzeugen würden. Anschließend wird die Zieldatenbank nach Wörtern in dieser Liste abgefragt und die gefundenen Treffer erweitert, um mögliche maximal zusammenhängende Treffer -in beide Richtungen- zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Ablauf dafür ist:&lt;br /&gt;
&lt;br /&gt;
*1. Die 'query' Sequenz wird in Worte der Länge 'l' zerlegt (l = 3 für Proteine; l = 11 für DNA)&lt;br /&gt;
*2. Für jedes Wort wird eine Liste ähnlicher Wörter (w-mers) mit Score S&amp;gt;Threshold erzeugt (Threshold=13 bei Aminosäuresequenzen; basierend auf der BLOSUM62 Matrix)&lt;br /&gt;
*3. Alle w-mers der Liste werden in der Datenbank gesucht und die Position bestimmt&lt;br /&gt;
*4. Die Treffer werden erweitert, bis der Score kleiner wird&lt;br /&gt;
*5. Ist der Score größer als der cutoff, handelt es sich um ein 'high-scoring-pair' ('''HSP''')&lt;br /&gt;
*6. HSPs werden durch lokales Alignment erweiter (Smith Waterman), der echte Alignment Score wird berechnet. Gaps können nun berücksichtig werden.&lt;br /&gt;
&lt;br /&gt;
[[File:BLOSUM62 MATRIX.png|700px|center|thumb]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c''': Um was für einen Algorithmus handelt es sich bei BLAST? Nenne einen Vor- und einen Nachteil.&lt;br /&gt;
&lt;br /&gt;
*heuristischer Algorithmus&lt;br /&gt;
&lt;br /&gt;
 Vorteil: schnell&lt;br /&gt;
 Nachteil: nichts zwangsläufig das beste Alignment wird gefunden, abhängig von den Eingangsparametern; kann Fusionproteine nicht finden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''d''': Bestimme manuell für die Sequenz 'PRAKTIKA' sämtliche w-mers der Länge 3, die bei Verwendung der BLOSUM62 Matrix einen Score T&amp;gt;13 besitzen.&lt;br /&gt;
&lt;br /&gt;
[[File:BLAST1.jpeg|400px|center|thumb]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Durchführung ==&lt;br /&gt;
&lt;br /&gt;
Du erhälst folgende Sequenz:&lt;br /&gt;
&lt;br /&gt;
 MQIELSTCFFLCLLRFCFSATRRYYLGAVELSWDYMQSDLGELPVDARFPPRVPKSFPFNTSVVYKKTLFVE FTDHLFNIAKPRPPWMGLLGPTIQAEVYDTVVITLKNMASHPVSLHAVGVSYWKASEGAEYDDQTSQREK EDDKVFPGGSHTYVWQVLKENGPMASDPLCLTYSYLSHVDLVKDLNSGLIGALLVCREGSLAKEKTQTLH KFILLFAVFDEGKSWHSETKNSLMQDRDAASARAWPKMHTVNGYVNRSLPGLIGCHRKSVYWHVIGMGT TPEVHSIFLEGHTFLVRNHRQASLEISPITFLTAQTLLMDLGQFLLFCHISSHQHDGMEAYVKVDSCPEEPQ LRMKNNEEAEDYDDDLTDSEMDVVRFDDDNSPSFIQIRSVAKKHPKTWVHYIAAEEEDWDYAPLVLAPDD RSYKSQYLNNGPQRIGRKYKKVRFMAYTDETFKTREAIQHESGILGPLLYGEVGDTL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starte nun den BLAST-Server des NCBI. Achte darauf, als Algorithmus unter Program Selection 'blastp (protein-protein BLAST)' auszuwählen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''a''': Gib die Sequenz ein und starte die Suche. Um welches Protein handelt es sich? Welche Domänen enthält es?&lt;br /&gt;
&lt;br /&gt;
 Coagulation faktor VIII (Homo sapiens)&lt;br /&gt;
 Domäne: Cupredoxin 1,2,3 und Multicopper Oxi- dase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Suche nun in einer geeigneten Datenbank nach dem Protein. (Uniprot)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Welche molekulare Funktion hat das Protein und an welchen biologischen Prozessen ist es beteiligt? An welcher Krankheit ist es beteiligt?&lt;br /&gt;
&lt;br /&gt;
Molekulare Funktion: Kupferion- bindend und besitzt eine Oxidoreduktase Aktivität.&lt;br /&gt;
 '''Biologische Prozesse:'''&lt;br /&gt;
 Akute-Phase-Antwort: eine akute entzündliche Reaktion, die nicht Antikörperproteine beinhaltet. Deren Konzentration steigt aufgrund einer Verletzung oder Infektion an&lt;br /&gt;
 Blutgerinnung&lt;br /&gt;
 Aktivierung der Blutplättchen ( bei Blutgerinnung)&lt;br /&gt;
 Vesikel Ummantelung&lt;br /&gt;
 Transport: Endoplasmatisches Retikulum zum Golgi&lt;br /&gt;
&lt;br /&gt;
 '''Krankheit:''' &lt;br /&gt;
 Hämophilie A (häufige, rezessive X-chromosomale Koagulationsstörung)&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=9.Biomarker&amp;diff=772</id>
		<title>9.Biomarker</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=9.Biomarker&amp;diff=772"/>
		<updated>2021-01-31T18:51:59Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Aufgabe 1: Definitionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Aufgabe 1: Definitionen ==&lt;br /&gt;
&lt;br /&gt;
'''ROC''': Abkürzung für '''R'''eceiver '''O'''perating '''C'''haracteristic. Dies ist eine Methode mit der man Analysemethoden wie z.B. Diagnosealgorithmen optimieren und bewerten kann. Dafür bestimmt man die falschpositiven und falschnegativen Ergebnisse der Analysemethode und bestimmt damit die Sensitivität und Spezifität der Methode. Anschließend wägt man diese gegeneinander ab. Dies geschieht mittels der Grenzwertoptimierungskurve (ROC- Kurve).&lt;br /&gt;
&lt;br /&gt;
'''AUC''': Abkürzung für '''A'''rea '''u'''nder '''C'''urve. Beschreibt die Fläche unter der Kurve die man erhält wenn man Sensitivität gegen 1-Spezifität aufträgt. Der AUC-Wert liegt dabei zwischen 1 und 0. Ein Wert nahe 1 bedeutet dabei dass die Analysemethode wenig falschpositive und falschnegative Werte generiert. Ein Wert nahe 0 bedeutet dass die Analysemethode fast ausschließlich falschpositive und falschnegative Werte generiert. Dies bedeutet, dass der Algothitmus trotzdem funktioniert, man ihn jedoch &amp;quot;umdrehen&amp;quot; muss. Werte um 0,5 herum sind daher die schlechtesten Werte, da diese bedeuten dass die Methode qualitativ so gut sind wie per Zufall zu diagnositizieren.&lt;br /&gt;
&lt;br /&gt;
'''Spezifität''': &amp;lt;math&amp;gt; \frac{True Negatives}{(False Positives+True Negatives)}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Rate, mit denen die Analysemethode Negativproben korrekt erkennt werden. Idealerweise geht der Werte gegen 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Sensitivität''': &amp;lt;math&amp;gt; \frac{True Positives}{(False Negatives+True Positives)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rate, mit denen die Analysemethode Positivproben korrekt erkennt werden. Idealerweise geht der Werte gegen 1.&lt;br /&gt;
&lt;br /&gt;
'''logit-Funktion''': eine logistische Funktion, die Analysemethoden verwenden, um mit&lt;br /&gt;
Expressionsleveln von Biomarkern einen Wert zwischen 0 und 1 zu berechnen. Dieser kann dann verwendet werden, um abzuschätzen, ob ein positives oder ein negatives Ergebnis vorliegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;logit(P) = log \frac{P_{X}}{1-P_{X}} = \beta_{1} * TPM_{GenX} + \beta_{0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Zähler=Wahrscheinlichkeit; Nenner=Gegenwahrscheinlichkeit)&lt;br /&gt;
&lt;br /&gt;
'''Threshold''': Cutoff-Wert in der logit-Funktion. Dort trennt der Analysealgrithmus die logit-Funktion.&lt;br /&gt;
&lt;br /&gt;
Alles auf einer Seite wird als positiv bewertet und alles auf der anderen Seite als&lt;br /&gt;
negativ. Ob positiv krank bedeutet, hängt davon ab, ob bei kranken Menschen dieser Biomarker hoch- oder runtereguliert ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anderer Erklärungsansatz: &lt;br /&gt;
*Ein Grenzwert zwischen 2 Konditionen&lt;br /&gt;
*Wird anhand Trainingsdaten justiert&lt;br /&gt;
*Beispiel: krank=1; gesund=0; Threshold=0.5; Alle Werte unter 0.5 sind gesund&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 2: Biomarker ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Was ist ein Biomarker und wofür kann er verwendet werden?&lt;br /&gt;
&lt;br /&gt;
Biomarker sind messbare biologische Parameter die eine gewisse Aussagekraft für Diagnose und Prognose haben. Mit der Analyse von Biomarkern kann man bei der Diagnose von Krankheiten bei Menschen helfen. Das Protein Troponin T ist beispielweise der Indikator in der Herzinfarkdiagnostik. Da dieses Protein in Herzmuskeln besonders exprimirt wird und als Konsequenz eines sterbenden Herzmuskels in die Blutbahn gelangt, wird dieser Wert bei Brustbeschwerden als joch signifikant für die weitere Diagnostik oder Therapie angesehen. &lt;br /&gt;
Ein moderner Ansatz in der Bioinformatik wäre bspw. die Genexpression als Biomarker zu verwenden. Möglicherweise könnten so Tumorzellen sicher im Blut detektiert werden, da sich ihre Genexpression von physiologische Zellen deutlich unterscheidet. Eine standardisierte, klinische Anwendung ist bisher jedoch nicht möglich.&lt;br /&gt;
&lt;br /&gt;
'''b''': Beschreiben Sie, wie Biomarker bestimmt werden können.&lt;br /&gt;
&lt;br /&gt;
Einfache Biomarker wie Körpertemperatur und Blutdruck kann man mit einfachen diagnostischen Methoden bestimmen (Fieberthermometer bzw Oberarm-Manometer). &lt;br /&gt;
&lt;br /&gt;
Um Genexpression als Biomarker zu nutzen, kann mit einer RNA-Sequenzierung eine 'verdächtige' Probe mit einer Referenzprobe vergleichen. Die Werte kann man anschließend mit Analysemethoden aufbereiten, und am Besten mit mehreren Biomarkern eine zuverlässigere Vorraussage treffen.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich liefert die Bioinformatik hier viele Möglichkeiten neue Biomarker in der medizinischen Diagnostik langfristig zu etablieren:&lt;br /&gt;
*Klare Unterschiede zwischen zu untersuchenden Zuständen erkennbar (Bspw: Metabolitlevel - Expressionslevel)&lt;br /&gt;
*Auswertung großer Datensätze mit bioinformatischen Methoden wie 'machine learning'&lt;br /&gt;
*Auf den Patienten hochgradig zugeschnittene Behandlungskonzepte im Sinne von 'individualized medicine'&lt;br /&gt;
&lt;br /&gt;
'''c''': Warum ist ein einzelner Biomarker meistens nicht genug und was ist der Vorteil einer&lt;br /&gt;
Biomarker-Signatur?&lt;br /&gt;
&lt;br /&gt;
Ein Biomarker reicht oft nicht, da die Werte mehr oder weniger um einen Mittelwert streuen. Ein Wert kann also durchaus mal aus Ausreißer jenseits des Thresholdes liegen und ein 'falsch positives' oder 'falsch negatives' Ergebnis erzeugen. Die Signifikanz eines Testes kann durch die Verwendung mehrerer mit der Krankheit assoziierter Biomarker (gennant '''Biomarker-Signatur''') deutlich erhöht werden. Dies erhöht also sowohl die Spezifität als auch die Sensivität.&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 3 ==&lt;br /&gt;
&lt;br /&gt;
Aus den ermittelten Metabolitleveln einer imaginären Studie wurde ein logistisches&lt;br /&gt;
Regressionsmodell entworfen. Dieses Modell soll in der Lage sein, an Hand von diesen&lt;br /&gt;
Metabolitleveln eine Vorhersage über den Gesundheitszustand von Patienten zu machen. Bei&lt;br /&gt;
dem Aufstellen des Modells wurde eine 0 als krank und eine 1 als gesund definiert. Folgende&lt;br /&gt;
Ausgaben aus diesem Modell wurden enthalten:&lt;br /&gt;
&lt;br /&gt;
[[File:Biomarker_log_reg.jpeg|700px|center|thumb]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte bearbeiten Sie nun folgende Fragestellungen:&lt;br /&gt;
&lt;br /&gt;
'''a''': Was sind FPR, TPR, TNR und FNR? Erklären Sie kurz!&lt;br /&gt;
&lt;br /&gt;
*'''FPR''': '''F'''alse '''P'''ositive '''R'''ate: Rate an Patienten, die gesund sind, aber vom Modell als krank erachtet werden.&lt;br /&gt;
*'''TPR''': '''T'''rue '''P'''ositive '''R'''ate: Rate an Patienten, die krank sind, und vom Modell als krank erachtet werden. &lt;br /&gt;
*'''TNR''': '''T'''rue '''N'''egative '''R'''ate: Rate an Patienten, die gesund sind, und vom Modell als gesund erachtet werden.&lt;br /&gt;
*'''FNR''': '''F'''alse '''N'''egative '''R'''ate: Rate an Patienten, die krank sind, aber vom Modell als gesund erachtet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''TPR = Sensivität'''&lt;br /&gt;
&lt;br /&gt;
'''TNR = Spezifität'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) Berechnen Sie für die 6 Thresholds 0; 0,2; 0,4; 0,6; 0,8; 1 die Spezifität und die&lt;br /&gt;
Sensitivität des Modells.&lt;br /&gt;
&lt;br /&gt;
[[File:Biomarker_sen_spe.jpeg|700px|center|thumb]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c) Welcher dieser Thresholds ist für dieses Modell der Beste? Begründen Sie!&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich sollte ein Threshold gewählt werden, bei dem Sensivität und Spezifität möglichst gegen 1 gehen. Hier besitzt bspw der Threshold von 0.6 den höchsten Wert für die Summe aus Spezifität und Sensivität. &lt;br /&gt;
&lt;br /&gt;
Bei vielen Modellen muss jedoch entschieden werden, ob der Test eher sensibel oder spezifisch sein soll.&lt;br /&gt;
Die passende Threshold hängt also davon ab, welche Krankheit man detektieren möchte. Je schwerwiegender diese ist oder je einfacher die Diagnose nach einem Treffer mit dem Modell, desto eher kann auch eine geringe Spezifität für eine möglichst hohe Sensitivität in Kauf nehmen.&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=7.Hypothesentests&amp;diff=771</id>
		<title>7.Hypothesentests</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=7.Hypothesentests&amp;diff=771"/>
		<updated>2021-01-31T18:46:10Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* Aufgabe 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Aufgabe 1 ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Was misst ein t-Test und wie wird dieser berechnet? Was bedeutet der p-Wert?&lt;br /&gt;
&lt;br /&gt;
Der t-Test ist eine Methode der statistischen Analyse, bei der man testet ob ein Mittelwert einer Stichprobe von dem Erwartungswert der Grundgesamtheit abhängt. Mit Varianten des t-Tests kann man außerdem Nullhypothesen(H0) überprüfen, ob zwei oder mehr Stichproben derselben Gesamtheit entspringen oder sich dafür zu signifikant unterscheiden. Der p-Wert ist eine Wahrscheinlichkeit und gibt hierbei das minimale Signifikanzniveau an, bei dem H0 nicht mehr gilt. Der p-Wert ist außerdem die Wahrscheinlichkeit mit der Stichproben zufällig die H0-Hypothese ablehnen.&lt;br /&gt;
&lt;br /&gt;
Für einen t-Test müssen zunächst Mittelwert, Standardabweichung und Freiheitsgrade für alle Stichproben berechnet werden.  &lt;br /&gt;
&lt;br /&gt;
Mittelwert: &amp;lt;math&amp;gt;\bar{x}_{\mathrm{arithm}} = \frac{1}{n} \sum_{i=1}^n{x_i} = \frac{x_1 + x_2 + \dotsb + x_n}{n}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardabweichung: &amp;lt;math&amp;gt;\tilde s := +\sqrt{\frac{1}{n} \sum \limits_{i=1}^n\left(x_i-\overline x\right)^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Freiheitsgrade: df = n-1&lt;br /&gt;
&lt;br /&gt;
In den Formeln ist &amp;lt;math&amp;gt;\bar{x} &amp;lt;/math&amp;gt; der Mittelwert, &amp;lt;math&amp;gt; x_1 &amp;lt;/math&amp;gt; etc. die einzelnen Werte der Stichprobe und n die Anzahl der Werte einer Stichprobe.&lt;br /&gt;
&lt;br /&gt;
Nachdem man diese Werte bestimmt hat, kann man mit verschiedenen Formeln (da es viele veschiedene t-Tests gibt) den t-Wert berechnen. Hier wird beispielsweise die Formel für den gepoolten Welch-t-test gezeigt: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t \quad = \quad {\; \overline{x}_1 - \overline{x}_2 \; \over \sqrt{ \; {s_1^2 \over N_1} \; + \; {s_2^2 \over N_2} \quad }}\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der berechnete Wert, wird dann in einer T-Tabelle nachgeschlagen und verglichen. Bevor man einen Wert heraussuchen kann muss ein Signifikanzniveau festgelegt werden, über dem H0 abgelehnt wird, z.B. 0,05. Dann kann man in der Tabelle den Referenz-t-Wert finden und wenn der berechnete t-Wert über dem Referenzwert ist, dann unterscheiden sich die Stichproben signifikant und können nicht als zwei Stichproben aus der gleichen Grundgesamtheit angesehen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Wie unterscheiden sich Student‘s t-Test und Welch‘s t-Test?&lt;br /&gt;
&lt;br /&gt;
Students t-Test sollte nur angewendet werden, wenn die Grundgesamtheiten die gleiche Varianz&lt;br /&gt;
aufweisen. Wenn dies der Fall ist, sollte der Welch-Test verwendet werden.&lt;br /&gt;
&lt;br /&gt;
 Student´s t- test    -      Gleiche Varianz der Stichproben&lt;br /&gt;
 Welch´s t- test      -      Ungleiche Varianz der Stichproben&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 2 ==&lt;br /&gt;
&lt;br /&gt;
'''a''': Welches statistische Problem tritt auf, wenn man eine statistische Signifikanz zwischen zweiBedingungen für viele Gene testet? &lt;br /&gt;
&lt;br /&gt;
*Je mehr Gene getestet werden, desto größer ist die Chance einen falsch- positiven zu detektieren&lt;br /&gt;
* Der p-Wert muss angeglichen werden um aussagekräftige Ergebnisse zu bekommen (Bsp. BonferroniKorrektur oder Benjamini-Hochberg Prozedur)&lt;br /&gt;
* Beispiel: Bei einem Signifikanzniveau von 5% und 1000 Proben, gibt es rein statistisch die Wahrscheinlichkeit, das 50 Proben fälschlicherweise als signifikant gelten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b''': Was sind die Unterschiede zwischen der Prozedur nach Benjamini-Hochberg und der&lt;br /&gt;
Bonferroni-Korrektur?&lt;br /&gt;
&lt;br /&gt;
Bonferroni&lt;br /&gt;
* Statistisch sehr sicher, aber sehr streng&lt;br /&gt;
* Einfach zu berechnen/ programmieren&lt;br /&gt;
* Produziert viele falsch-negative Werte (FN-false negative)&lt;br /&gt;
Benjamini-Hochberg&lt;br /&gt;
* Weniger streng, höhere Chance auf verwertbare Ergebnisse&lt;br /&gt;
* Komplizierter zu programmieren&lt;br /&gt;
* Je kleiner FDR (false discovery rate) gewählt wird, desto näher kommt das Ergebnis an die korrigierten P-Werte von Bonferroni heran&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c''': Wie funktioniert die Bonferroni-Korrektur?&lt;br /&gt;
&lt;br /&gt;
Zuerst berechnet man den korrigierten p-Wert mit folgender Formel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p_\text{i*}=p_\text{i}*n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei &amp;lt;math&amp;gt; p_\text{i*}&amp;lt;/math&amp;gt; der korrigierte Wert ist, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p_\text{i}&amp;lt;/math&amp;gt;der p-Wert für Merkmal i und n die Anzahl der Merkmale.&lt;br /&gt;
&lt;br /&gt;
Danach vergleicht man die korrigierten Werte mit dem Signifikanzniveau. Wenn der Wert kleiner ist als das Niveau, dann ist der Wert signifikant. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''d''': Wie funktioniert die Benjamini-Hochberg Prozedur?&lt;br /&gt;
&lt;br /&gt;
Die Prozedur folgt den folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
- Sortiere die Merkmale nach den zugehörigen p-Werten aufsteigend. &lt;br /&gt;
&lt;br /&gt;
- Gib jedem p-Wert einen Rang zu (i) &lt;br /&gt;
&lt;br /&gt;
- Berechne für jeden p-Wert den BH kritischen Wert mit folgender Formel: &lt;br /&gt;
&lt;br /&gt;
BH = &amp;lt;math&amp;gt;\frac{i}{n}&amp;lt;/math&amp;gt; * Q wobei i der Rang ist, n die Anzahl der Merkmale (Stichprobenanzahl) und Q die False Discovery Rate&lt;br /&gt;
&lt;br /&gt;
- Vergleiche jeden p-Wert mit seinem kritischen BH-Wert. &lt;br /&gt;
&lt;br /&gt;
- der größte p-Wert der kleiner als der kritische BH Wert ist, ist der Wert ab dem alle p-Werte aufwärts H0 ablehnen, somit signifikant sind. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''e''':  Bei der Analyse von Metaboliten im Blut von Patienten mit Niereninsuffizienz ist folgende&lt;br /&gt;
Tabelle entstanden. Zeige, welche der nachfolgenden p-Werte der Metabolite nach&lt;br /&gt;
Benjamini-Hochberg als Signifikant angesehen werden können (α = 0,05). Zeige, welche&lt;br /&gt;
Metabolite nach Bonferroni als signifikant angesehen werden können. Beschreibe die&lt;br /&gt;
Unterschiede!&lt;br /&gt;
&lt;br /&gt;
'''Bonferroni-Methode''':&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Metabolit !! P !! P*&lt;br /&gt;
|-&lt;br /&gt;
! C-mannosyltryptophan&lt;br /&gt;
| 1.10E-03 || 0.0297&lt;br /&gt;
|-&lt;br /&gt;
! pseudouridine&lt;br /&gt;
| 3.70E-03 || 0.0999&lt;br /&gt;
|-&lt;br /&gt;
! O-sulfo-L-tyrosine&lt;br /&gt;
| 1.40E-02 || 0.378&lt;br /&gt;
|-&lt;br /&gt;
! margarate (17:0)&lt;br /&gt;
| 2.80E-01 || 7.56&lt;br /&gt;
|-&lt;br /&gt;
! erythronate*&lt;br /&gt;
| 2.80E-02 || 0.756&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylalanine&lt;br /&gt;
| 4.00E-02 || 1.08&lt;br /&gt;
|-&lt;br /&gt;
! 4-androsten-3beta,17beta-diol disulfate 2*&lt;br /&gt;
| 5.30E-03 || 0.1431&lt;br /&gt;
|-&lt;br /&gt;
! 10-nonadecenoate (19:1n9)&lt;br /&gt;
| 8.90E-01 || 24.03&lt;br /&gt;
|-&lt;br /&gt;
! 4-acetamidobutanoate&lt;br /&gt;
| 5.30E-02 || 1.431&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylthreonine&lt;br /&gt;
| 2.70E-01 || 7.29&lt;br /&gt;
|-&lt;br /&gt;
! eicosenoate (20:1n9 or 11)&lt;br /&gt;
| 4.80E-01 || 12.96&lt;br /&gt;
|-&lt;br /&gt;
! 15-methylpalmitate (isobar with 2- methylpalmitate)&lt;br /&gt;
| 4.70E-01 || 12.69&lt;br /&gt;
|-&lt;br /&gt;
! N1-methyladenosine&lt;br /&gt;
| 5.50E-02 || 1.485&lt;br /&gt;
|-&lt;br /&gt;
! X - 12092&lt;br /&gt;
| 1.90E-01 || 5.13&lt;br /&gt;
|-&lt;br /&gt;
! X - 12216&lt;br /&gt;
| 1.50E-02 || 0.405&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylornithine&lt;br /&gt;
| 4.50E-03 || 0.1215&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylornithine&lt;br /&gt;
| 1.30E-01 || 3.51&lt;br /&gt;
|-&lt;br /&gt;
! dihomo-linoleate (20:2n6)&lt;br /&gt;
| 8.60E-01 || 23.22&lt;br /&gt;
|-&lt;br /&gt;
! 1-docosahexaenoylglycerophosphocholine*&lt;br /&gt;
| 3.90E-02 || 1.053&lt;br /&gt;
|-&lt;br /&gt;
! kynurenine&lt;br /&gt;
| 4.60E-02 || 1.242&lt;br /&gt;
|-&lt;br /&gt;
! 5alpha-pregnan-3beta,20alpha-diol disulfate&lt;br /&gt;
| 1.30E-02 || 0.351&lt;br /&gt;
|-&lt;br /&gt;
! erythritol&lt;br /&gt;
| 1.20E-01 || 3.24&lt;br /&gt;
|-&lt;br /&gt;
! homocitrulline&lt;br /&gt;
| 2.50E-01 || 6.75&lt;br /&gt;
|-&lt;br /&gt;
! bradykinin, des-arg(9)&lt;br /&gt;
| 3.20E-01 || 8.64&lt;br /&gt;
|-&lt;br /&gt;
! X - 04494&lt;br /&gt;
| 9.40E-02 || 2.538&lt;br /&gt;
|-&lt;br /&gt;
! linoleate (18:2n6)&lt;br /&gt;
| 8.20E-01 || 22.14&lt;br /&gt;
|-&lt;br /&gt;
! mannose&lt;br /&gt;
| 2.00E-01 || 5.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
mit den p-Werten hat man die p*-Werte berechnet und dann mit dem Signifikanzniveau 0.05 verglichen. Der einzig signifikante Wert ist C-mannoysltryptophan.&lt;br /&gt;
&lt;br /&gt;
'''Benjamini-Hochberg Prozedur:'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Metabolit !! P !! Rang !! BHKW !! Differenz&lt;br /&gt;
|-&lt;br /&gt;
! C-mannosyltryptophan&lt;br /&gt;
| 1.10E-03 || 1 || 0.0019 || -0.0008&lt;br /&gt;
|-&lt;br /&gt;
! pseudouridine&lt;br /&gt;
| 3.70E-03 || 2 || 0.0037 || 0&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylornithine&lt;br /&gt;
| 4.50E-03 || 3 || 0.0056 || -0.0011&lt;br /&gt;
|-&lt;br /&gt;
! 4-androsten-3beta,17beta-diol disulfate 2*&lt;br /&gt;
| 5.30E-03 || 4 || 0.0074 || -0.0021&lt;br /&gt;
|-&lt;br /&gt;
! 5alpha-pregnan-3beta,20alpha-diol disulfate&lt;br /&gt;
| 1.30E-02 || 5 || 0.0093 || 0.0037&lt;br /&gt;
|-&lt;br /&gt;
! O-sulfo-L-tyrosine&lt;br /&gt;
| 1.40E-02 || 6 || 0.0111 || 0.0029&lt;br /&gt;
|-&lt;br /&gt;
! X - 12216&lt;br /&gt;
| 1.50E-02 || 7 || 0.013 || 0.002&lt;br /&gt;
|-&lt;br /&gt;
! erythronate*&lt;br /&gt;
| 2.80E-02 || 8 || 0.0148 || 0.0132&lt;br /&gt;
|-&lt;br /&gt;
! 1-docosahexaenoylglycerophosphocholine*&lt;br /&gt;
| 3.90E-02 || 9 || 0.0167 || 0.0223&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylalanine&lt;br /&gt;
| 4.00E-02 || 10 || 0.0185 || 0.0215&lt;br /&gt;
|-&lt;br /&gt;
! kynurenine&lt;br /&gt;
| 4.60E-02 || 11 || 0.0204 || 0.0256&lt;br /&gt;
|-&lt;br /&gt;
! 4-acetamidobutanoate&lt;br /&gt;
| 5.30E-02 || 12 || 0.0222 || 0.0308&lt;br /&gt;
|-&lt;br /&gt;
! N1-methyladenosine&lt;br /&gt;
| 5.50E-02 || 13 || 0.0241 || 0.0309&lt;br /&gt;
|-&lt;br /&gt;
! X - 04494&lt;br /&gt;
| 9.40E-02 || 14 || 0.0259 || 0.0681&lt;br /&gt;
|-&lt;br /&gt;
! erythritol&lt;br /&gt;
| 1.20E-01 || 15 || 0.0278 || 0.0922&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylornithine&lt;br /&gt;
| 1.30E-01 || 16 || 0.0296 || 0.1004&lt;br /&gt;
|-&lt;br /&gt;
! X - 12092&lt;br /&gt;
| 1.90E-01 || 17 || 0.0315 || 0.1585&lt;br /&gt;
|-&lt;br /&gt;
! mannose&lt;br /&gt;
| 2.00E-01 || 18 || 0.0333 || 0.1667&lt;br /&gt;
|-&lt;br /&gt;
! homocitrulline&lt;br /&gt;
| 2.50E-01 || 19 || 0.0352 || 0.2148&lt;br /&gt;
|-&lt;br /&gt;
! N-acetylthreonine&lt;br /&gt;
| 2.70E-01 || 20 || 0.037 || 0.233&lt;br /&gt;
|-&lt;br /&gt;
! margarate (17:0)&lt;br /&gt;
| 2.80E-01 || 21 || 0.0389 || 0.2411&lt;br /&gt;
|-&lt;br /&gt;
! bradykinin, des-arg(9)&lt;br /&gt;
| 3.20E-01 || 22 || 0.0407 || 0.2793&lt;br /&gt;
|-&lt;br /&gt;
! 15-methylpalmitate (isobar with 2- methylpalmitate)&lt;br /&gt;
| 4.70E-01 || 23 || 0.0426 || 0.4274&lt;br /&gt;
|-&lt;br /&gt;
! eicosenoate (20:1n9 or 11)&lt;br /&gt;
| 4.80E-01 || 24 || 0.0444 || 0.4356&lt;br /&gt;
|-&lt;br /&gt;
! linoleate (18:2n6)&lt;br /&gt;
| 8.20E-01 || 25 || 0.0463 || 0.7737&lt;br /&gt;
|-&lt;br /&gt;
! dihomo-linoleate (20:2n6)&lt;br /&gt;
| 8.60E-01 || 26 || 0.0481 || 0.8119&lt;br /&gt;
|-&lt;br /&gt;
! 10-nonadecenoate (19:1n9)&lt;br /&gt;
| 8.90E-01 || 27 || 0.05 || 0.84&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hier ist der Cutoff bei Rang 4. Dieser Wert und alle darüber sind somit signifikant. &lt;br /&gt;
&lt;br /&gt;
Unterschiede: Durch BH werden deutlich mehr Metabolite als signifikant eingestuft, der Aufwand ist jedoch größer. Bonferroni liefert eindeutige Ergebnisse (signifikante Metabolite von Bonferroni sind immer in den signifikanten Metaboliten von BH enthalten).&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=770</id>
		<title>6.Normalisierungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=770"/>
		<updated>2021-01-31T18:36:25Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* b: Wieso wird die Normalisierung bei RNASeq-Proben angewendet? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aufgabe 1: Grundlagen== &lt;br /&gt;
===a:  Warum ist es notwendig RNASeq Daten zu normalisieren?=== &lt;br /&gt;
*Eliminieren von statischen Abweichungen, die durch z.B. verschiedene Durchführungsrunden, unterschiedliche Bedingungen, Laborausstattung, Experimentatoren, …  entstehen&lt;br /&gt;
* Heterologe Geneigenschaften können zu unterschiedlichen Ergebnissen bei eigentlich gleicher Genexpression führen&lt;br /&gt;
* Vergleichbarkeit von Proben ermöglichen&lt;br /&gt;
&lt;br /&gt;
===b: Rolle der Sequenziertiefe und Genlänge===&lt;br /&gt;
Die Sequenziertiefen und Genlängen müssen normalisiert werden, um die erhaltenen RNASeq Daten miteinander vergleichen zu können, da diese oft sehr unterschiedlich sind und das die Auswertung beeinflussen kann. So erhält man für längere Gene möglicherweise mehr reads, als für kürzere Gene, obwohl die Genexpression gleich ist. Der Fehlschluss liegt nah, dass das längere Gen stärker exprimiert wird. Bei einer hohen Sequenziertiefe erhält man mehr reads, als bei einer niedrigen Sequenziertiefe. Dabei muss das Verhältnis der erhaltenen reads für ein Gen, zu der Gesamtzahl an reads einer Sequenzierung betrachtet werden. Dies ist durch Normalisierungen möglich.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 2: RPKM und TPM==&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen &amp;amp; Genlänge (L) !! Counts (c) Replikat 1 !! Counts (c) Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A (7 kb) || 5 || 16&lt;br /&gt;
|-&lt;br /&gt;
| B (12 kb) || 10 || 36&lt;br /&gt;
|-&lt;br /&gt;
| C (0,5 kb) || 2 || 8&lt;br /&gt;
|-&lt;br /&gt;
| D (25 kb) || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
===a: Normalisierung mit RPKM===&lt;br /&gt;
* RPKM steht für 'Reads per kilobase of transcript per Million mapped reads' &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt; RPKM =  \frac{ c_\text{i}}{L_\text{i} \cdot N} &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
 &amp;lt;math&amp;gt;   \frac{ c_\text{i}}{L_\text{i}} &amp;lt;/math&amp;gt;  → Normalisierung der Genlänge &amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; L_\text{i} \cdot N &amp;lt;/math&amp;gt; → Normalisierung der Sequenziertiefe &lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; RPKM (A1) =  \frac{ 5}{7 kb \cdot 18} = 0,0397 &amp;lt;/math&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! RPKM Replikat 1 !! RPKM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 0,0397 || 0,0381&lt;br /&gt;
|-&lt;br /&gt;
| B || 0,0463 || 0,05&lt;br /&gt;
|-&lt;br /&gt;
| C || 0,2222 || 0,2667&lt;br /&gt;
|-&lt;br /&gt;
| D || 0,0022 || 0&lt;br /&gt;
|}&lt;br /&gt;
* Ein hoher RPKM Wert, sagt aus, dass die Genexpression stärker ist, als bei einem niedrigeren RPKM Wert, indem die Größe des Gens berücksichtigt wird. &lt;br /&gt;
* Zum Vergleich der Genexpression innerhalb einer Probe, können die RPKM Werte genutzt werden, sie sind jedoch nicht dafür geeignet Genexpressionen von Genen verschiedener Proben miteinander zu vergleichen, da die Bedingungen meist sehr unterschiedlich sind und falsche Aussagen über die Genexpressionen gemacht werden können. Die Summe aller RPKMs ergibt nicht 100 % und kann somit keine Anteile am Ganzen widerspiegeln.&lt;br /&gt;
&lt;br /&gt;
===b: Normalisierung mit TPM===&lt;br /&gt;
* TPM steht für 'Transcripts per Million. &lt;br /&gt;
* Wenn 1 Millionen Transkripte sequenziert werden würden, wäre TPMi die Anzahl an Transkripten des Typs 'i'.&lt;br /&gt;
* Bei TPM wird außerdem die totale Anzahl an reads nicht berücksichtigt.&amp;lt;br&amp;gt;&lt;br /&gt;
* Anders, als bei der Normalisierung mit RPKM wird erst die Genlänge und dann die Sequenziertiefe normalisiert. &lt;br /&gt;
* TPM berechnet das Verhältnis zwischen den Ergebnissen und die Werte in jeder Spalte ergeben 1 Million. &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt;  TPM =  \frac{ c_\text{i}}{L_\text{i}}  \cdot  \dfrac {1}{\sum_\text{n} \dfrac {c_\text{n}}{L_\text{n}}}  \cdot 10^6 &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
'''Parameter:''' &amp;lt;br&amp;gt;&lt;br /&gt;
c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i'&amp;lt;br&amp;gt;&lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in kbp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  TPM (A1) =  \frac{ 5}{7000}  \cdot  \dfrac {1}{ \dfrac {5}{7000} +  \dfrac {10}{12000} +  \dfrac {2}{500} + \dfrac {1}{25000}}  \cdot 10^6  = 127834 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! TPM Replikat 1 !! TPM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 127834 || 107383&lt;br /&gt;
|-&lt;br /&gt;
| B || 149139 || 140940&lt;br /&gt;
|-&lt;br /&gt;
| C || 715868 || 751678&lt;br /&gt;
|-&lt;br /&gt;
| D || 7159 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c: Anwendungsbereich===&lt;br /&gt;
RPKM und TPM werden genutzt um die Expression verschiedener Gene, aus der gleichen Probe, einer RNA Sequenzierung miteinander zu vergleichen. Sie sind also Normalisierungsverfahren innerhalb einer Probe.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 3: Normalisierung zwischen Proben==&lt;br /&gt;
==a: Normalisierungsmethode==&lt;br /&gt;
Für die Normalisierung zwischen Proben wird TMM eingesetzt. TMM steht für 'Trimmed mean of M – Values normalization method'.&lt;br /&gt;
==b: Wieso wird die Normalisierung bei RNASeq-Proben angewendet?==&lt;br /&gt;
* Um das relative RNA-Produktionsniveau aus RNASeq-Daten abzuschätzen&lt;br /&gt;
* Es können heterologe Geneigenschaften zwischen 2 Proben auftauchen und eine identische Genexpression, fälschlicherweise, als unterschiedlich erkannt werden&lt;br /&gt;
* Beispiel: Expression zwischen gesunden und kranken Patienten soll auf bestimmte Marker untersucht werden&lt;br /&gt;
&lt;br /&gt;
==c. Normalisierung mit TMM==&lt;br /&gt;
'''1.''' Der Gewichtungsfaktor für das Expressionsverhältnis für Gen 'g' zwischen Probe 'k' ' und 'k' wird bestimmt. Dabei werden kleinere Werte verstärkt und große abgeschwächt. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} =  \frac{ N_\text{k} - Y_\text{gk}}{N_\text{k} \cdot Y_\text{gk}}  +  \frac{ N_\text{k`} - Y_\text{gk`}}{N_\text{k`} \cdot Y_\text{gk`}} &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''2.''' Der Mittelwert aller Expressionsverhältnisse wird berechnet. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = log_2  \dfrac { \dfrac {Y_\text{gk}}{N_\text{k}}}{ \dfrac {Y_\text{gk`}}{N_\text{k`}}}  &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''3.''' Die gewichteten Mittelwerte aller Expressionsverhältnisse werden berechnet. Einsetzen der in 1. und 2. ermittelten Werte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;math&amp;gt; TMM = 2^{log_2 (TMM_\text{k}^\text{k`})} &amp;lt;/math&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; log_2 (TMM_\text{k}^\text{k`}) =  \frac{ \underset {g \in G}{\sum}   W_\text{gk}^\text{k´} \cdot M_\text{gk}^\text{k´}} { \sum_{g \in G} W_\text{gk}^\text{k´}} &amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Mittelwerte aller Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Gewichtungsfaktor der Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
G = Set aller Gene&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Bedingungen für dieses Verfahren:''' &amp;lt;br&amp;gt;&lt;br /&gt;
* Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; , Y&amp;lt;sub&amp;gt;gk'&amp;lt;/sub&amp;gt; &amp;gt; 0&lt;br /&gt;
* Die oberen und unteren 30 % der &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} &amp;lt;/math&amp;gt; Werte werden nicht berücksichtigt&lt;br /&gt;
* Die 5 % am höchsten und niedrigsten exprimierten Gene werden nicht berücksichtigt&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=769</id>
		<title>6.Normalisierungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=769"/>
		<updated>2021-01-31T18:34:35Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* c: Anwendungsbereich */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aufgabe 1: Grundlagen== &lt;br /&gt;
===a:  Warum ist es notwendig RNASeq Daten zu normalisieren?=== &lt;br /&gt;
*Eliminieren von statischen Abweichungen, die durch z.B. verschiedene Durchführungsrunden, unterschiedliche Bedingungen, Laborausstattung, Experimentatoren, …  entstehen&lt;br /&gt;
* Heterologe Geneigenschaften können zu unterschiedlichen Ergebnissen bei eigentlich gleicher Genexpression führen&lt;br /&gt;
* Vergleichbarkeit von Proben ermöglichen&lt;br /&gt;
&lt;br /&gt;
===b: Rolle der Sequenziertiefe und Genlänge===&lt;br /&gt;
Die Sequenziertiefen und Genlängen müssen normalisiert werden, um die erhaltenen RNASeq Daten miteinander vergleichen zu können, da diese oft sehr unterschiedlich sind und das die Auswertung beeinflussen kann. So erhält man für längere Gene möglicherweise mehr reads, als für kürzere Gene, obwohl die Genexpression gleich ist. Der Fehlschluss liegt nah, dass das längere Gen stärker exprimiert wird. Bei einer hohen Sequenziertiefe erhält man mehr reads, als bei einer niedrigen Sequenziertiefe. Dabei muss das Verhältnis der erhaltenen reads für ein Gen, zu der Gesamtzahl an reads einer Sequenzierung betrachtet werden. Dies ist durch Normalisierungen möglich.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 2: RPKM und TPM==&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen &amp;amp; Genlänge (L) !! Counts (c) Replikat 1 !! Counts (c) Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A (7 kb) || 5 || 16&lt;br /&gt;
|-&lt;br /&gt;
| B (12 kb) || 10 || 36&lt;br /&gt;
|-&lt;br /&gt;
| C (0,5 kb) || 2 || 8&lt;br /&gt;
|-&lt;br /&gt;
| D (25 kb) || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
===a: Normalisierung mit RPKM===&lt;br /&gt;
* RPKM steht für 'Reads per kilobase of transcript per Million mapped reads' &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt; RPKM =  \frac{ c_\text{i}}{L_\text{i} \cdot N} &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
 &amp;lt;math&amp;gt;   \frac{ c_\text{i}}{L_\text{i}} &amp;lt;/math&amp;gt;  → Normalisierung der Genlänge &amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; L_\text{i} \cdot N &amp;lt;/math&amp;gt; → Normalisierung der Sequenziertiefe &lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; RPKM (A1) =  \frac{ 5}{7 kb \cdot 18} = 0,0397 &amp;lt;/math&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! RPKM Replikat 1 !! RPKM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 0,0397 || 0,0381&lt;br /&gt;
|-&lt;br /&gt;
| B || 0,0463 || 0,05&lt;br /&gt;
|-&lt;br /&gt;
| C || 0,2222 || 0,2667&lt;br /&gt;
|-&lt;br /&gt;
| D || 0,0022 || 0&lt;br /&gt;
|}&lt;br /&gt;
* Ein hoher RPKM Wert, sagt aus, dass die Genexpression stärker ist, als bei einem niedrigeren RPKM Wert, indem die Größe des Gens berücksichtigt wird. &lt;br /&gt;
* Zum Vergleich der Genexpression innerhalb einer Probe, können die RPKM Werte genutzt werden, sie sind jedoch nicht dafür geeignet Genexpressionen von Genen verschiedener Proben miteinander zu vergleichen, da die Bedingungen meist sehr unterschiedlich sind und falsche Aussagen über die Genexpressionen gemacht werden können. Die Summe aller RPKMs ergibt nicht 100 % und kann somit keine Anteile am Ganzen widerspiegeln.&lt;br /&gt;
&lt;br /&gt;
===b: Normalisierung mit TPM===&lt;br /&gt;
* TPM steht für 'Transcripts per Million. &lt;br /&gt;
* Wenn 1 Millionen Transkripte sequenziert werden würden, wäre TPMi die Anzahl an Transkripten des Typs 'i'.&lt;br /&gt;
* Bei TPM wird außerdem die totale Anzahl an reads nicht berücksichtigt.&amp;lt;br&amp;gt;&lt;br /&gt;
* Anders, als bei der Normalisierung mit RPKM wird erst die Genlänge und dann die Sequenziertiefe normalisiert. &lt;br /&gt;
* TPM berechnet das Verhältnis zwischen den Ergebnissen und die Werte in jeder Spalte ergeben 1 Million. &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt;  TPM =  \frac{ c_\text{i}}{L_\text{i}}  \cdot  \dfrac {1}{\sum_\text{n} \dfrac {c_\text{n}}{L_\text{n}}}  \cdot 10^6 &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
'''Parameter:''' &amp;lt;br&amp;gt;&lt;br /&gt;
c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i'&amp;lt;br&amp;gt;&lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in kbp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  TPM (A1) =  \frac{ 5}{7000}  \cdot  \dfrac {1}{ \dfrac {5}{7000} +  \dfrac {10}{12000} +  \dfrac {2}{500} + \dfrac {1}{25000}}  \cdot 10^6  = 127834 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! TPM Replikat 1 !! TPM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 127834 || 107383&lt;br /&gt;
|-&lt;br /&gt;
| B || 149139 || 140940&lt;br /&gt;
|-&lt;br /&gt;
| C || 715868 || 751678&lt;br /&gt;
|-&lt;br /&gt;
| D || 7159 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c: Anwendungsbereich===&lt;br /&gt;
RPKM und TPM werden genutzt um die Expression verschiedener Gene, aus der gleichen Probe, einer RNA Sequenzierung miteinander zu vergleichen. Sie sind also Normalisierungsverfahren innerhalb einer Probe.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 3: Normalisierung zwischen Proben==&lt;br /&gt;
==a: Normalisierungsmethode==&lt;br /&gt;
Für die Normalisierung zwischen Proben wird TMM eingesetzt. TMM steht für 'Trimmed mean of M – Values normalization method'.&lt;br /&gt;
==b: Wieso wird die Normalisierung bei RNASeq-Proben angewendet?==&lt;br /&gt;
TMM wird für die Normalisierung von RNASeq-Daten angewendet, um die Expression eines Gens unter verschiedenen Bedingungen zu vergleichen (Bspw, ob es in Krebszellen stärker oder schwächer exprimiert wird als in gesunden Zellen)&lt;br /&gt;
&lt;br /&gt;
==c. Normalisierung mit TMM==&lt;br /&gt;
'''1.''' Der Gewichtungsfaktor für das Expressionsverhältnis für Gen 'g' zwischen Probe 'k' ' und 'k' wird bestimmt. Dabei werden kleinere Werte verstärkt und große abgeschwächt. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} =  \frac{ N_\text{k} - Y_\text{gk}}{N_\text{k} \cdot Y_\text{gk}}  +  \frac{ N_\text{k`} - Y_\text{gk`}}{N_\text{k`} \cdot Y_\text{gk`}} &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''2.''' Der Mittelwert aller Expressionsverhältnisse wird berechnet. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = log_2  \dfrac { \dfrac {Y_\text{gk}}{N_\text{k}}}{ \dfrac {Y_\text{gk`}}{N_\text{k`}}}  &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''3.''' Die gewichteten Mittelwerte aller Expressionsverhältnisse werden berechnet. Einsetzen der in 1. und 2. ermittelten Werte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;math&amp;gt; TMM = 2^{log_2 (TMM_\text{k}^\text{k`})} &amp;lt;/math&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; log_2 (TMM_\text{k}^\text{k`}) =  \frac{ \underset {g \in G}{\sum}   W_\text{gk}^\text{k´} \cdot M_\text{gk}^\text{k´}} { \sum_{g \in G} W_\text{gk}^\text{k´}} &amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Mittelwerte aller Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Gewichtungsfaktor der Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
G = Set aller Gene&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Bedingungen für dieses Verfahren:''' &amp;lt;br&amp;gt;&lt;br /&gt;
* Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; , Y&amp;lt;sub&amp;gt;gk'&amp;lt;/sub&amp;gt; &amp;gt; 0&lt;br /&gt;
* Die oberen und unteren 30 % der &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} &amp;lt;/math&amp;gt; Werte werden nicht berücksichtigt&lt;br /&gt;
* Die 5 % am höchsten und niedrigsten exprimierten Gene werden nicht berücksichtigt&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
	<entry>
		<id>http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=768</id>
		<title>6.Normalisierungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.bioinfo.nat.tu-bs.de/index.php?title=6.Normalisierungen&amp;diff=768"/>
		<updated>2021-01-31T18:33:58Z</updated>

		<summary type="html">&lt;p&gt;Mka: /* b: Normalisierung mit TPM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aufgabe 1: Grundlagen== &lt;br /&gt;
===a:  Warum ist es notwendig RNASeq Daten zu normalisieren?=== &lt;br /&gt;
*Eliminieren von statischen Abweichungen, die durch z.B. verschiedene Durchführungsrunden, unterschiedliche Bedingungen, Laborausstattung, Experimentatoren, …  entstehen&lt;br /&gt;
* Heterologe Geneigenschaften können zu unterschiedlichen Ergebnissen bei eigentlich gleicher Genexpression führen&lt;br /&gt;
* Vergleichbarkeit von Proben ermöglichen&lt;br /&gt;
&lt;br /&gt;
===b: Rolle der Sequenziertiefe und Genlänge===&lt;br /&gt;
Die Sequenziertiefen und Genlängen müssen normalisiert werden, um die erhaltenen RNASeq Daten miteinander vergleichen zu können, da diese oft sehr unterschiedlich sind und das die Auswertung beeinflussen kann. So erhält man für längere Gene möglicherweise mehr reads, als für kürzere Gene, obwohl die Genexpression gleich ist. Der Fehlschluss liegt nah, dass das längere Gen stärker exprimiert wird. Bei einer hohen Sequenziertiefe erhält man mehr reads, als bei einer niedrigen Sequenziertiefe. Dabei muss das Verhältnis der erhaltenen reads für ein Gen, zu der Gesamtzahl an reads einer Sequenzierung betrachtet werden. Dies ist durch Normalisierungen möglich.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 2: RPKM und TPM==&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen &amp;amp; Genlänge (L) !! Counts (c) Replikat 1 !! Counts (c) Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A (7 kb) || 5 || 16&lt;br /&gt;
|-&lt;br /&gt;
| B (12 kb) || 10 || 36&lt;br /&gt;
|-&lt;br /&gt;
| C (0,5 kb) || 2 || 8&lt;br /&gt;
|-&lt;br /&gt;
| D (25 kb) || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
===a: Normalisierung mit RPKM===&lt;br /&gt;
* RPKM steht für 'Reads per kilobase of transcript per Million mapped reads' &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt; RPKM =  \frac{ c_\text{i}}{L_\text{i} \cdot N} &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
 &amp;lt;math&amp;gt;   \frac{ c_\text{i}}{L_\text{i}} &amp;lt;/math&amp;gt;  → Normalisierung der Genlänge &amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; L_\text{i} \cdot N &amp;lt;/math&amp;gt; → Normalisierung der Sequenziertiefe &lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; RPKM (A1) =  \frac{ 5}{7 kb \cdot 18} = 0,0397 &amp;lt;/math&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! RPKM Replikat 1 !! RPKM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 0,0397 || 0,0381&lt;br /&gt;
|-&lt;br /&gt;
| B || 0,0463 || 0,05&lt;br /&gt;
|-&lt;br /&gt;
| C || 0,2222 || 0,2667&lt;br /&gt;
|-&lt;br /&gt;
| D || 0,0022 || 0&lt;br /&gt;
|}&lt;br /&gt;
* Ein hoher RPKM Wert, sagt aus, dass die Genexpression stärker ist, als bei einem niedrigeren RPKM Wert, indem die Größe des Gens berücksichtigt wird. &lt;br /&gt;
* Zum Vergleich der Genexpression innerhalb einer Probe, können die RPKM Werte genutzt werden, sie sind jedoch nicht dafür geeignet Genexpressionen von Genen verschiedener Proben miteinander zu vergleichen, da die Bedingungen meist sehr unterschiedlich sind und falsche Aussagen über die Genexpressionen gemacht werden können. Die Summe aller RPKMs ergibt nicht 100 % und kann somit keine Anteile am Ganzen widerspiegeln.&lt;br /&gt;
&lt;br /&gt;
===b: Normalisierung mit TPM===&lt;br /&gt;
* TPM steht für 'Transcripts per Million. &lt;br /&gt;
* Wenn 1 Millionen Transkripte sequenziert werden würden, wäre TPMi die Anzahl an Transkripten des Typs 'i'.&lt;br /&gt;
* Bei TPM wird außerdem die totale Anzahl an reads nicht berücksichtigt.&amp;lt;br&amp;gt;&lt;br /&gt;
* Anders, als bei der Normalisierung mit RPKM wird erst die Genlänge und dann die Sequenziertiefe normalisiert. &lt;br /&gt;
* TPM berechnet das Verhältnis zwischen den Ergebnissen und die Werte in jeder Spalte ergeben 1 Million. &lt;br /&gt;
* Für die Normalisierung wird die Formel &amp;lt;math&amp;gt;  TPM =  \frac{ c_\text{i}}{L_\text{i}}  \cdot  \dfrac {1}{\sum_\text{n} \dfrac {c_\text{n}}{L_\text{n}}}  \cdot 10^6 &amp;lt;/math&amp;gt; verwendet.&lt;br /&gt;
'''Parameter:''' &amp;lt;br&amp;gt;&lt;br /&gt;
c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Anzahl an ausrichtbaren reads für ein Transkript 'i'&amp;lt;br&amp;gt;&lt;br /&gt;
L&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = Länge des Transkripts/Gens 'i' in kbp &amp;lt;br&amp;gt;&lt;br /&gt;
N = Gesamtanzahl an ausrichtbaren reads in Millionen &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Beispiel Gen A, Replikat 1:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  TPM (A1) =  \frac{ 5}{7000}  \cdot  \dfrac {1}{ \dfrac {5}{7000} +  \dfrac {10}{12000} +  \dfrac {2}{500} + \dfrac {1}{25000}}  \cdot 10^6  = 127834 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gen !! TPM Replikat 1 !! TPM Replikat 2&lt;br /&gt;
|-&lt;br /&gt;
| A || 127834 || 107383&lt;br /&gt;
|-&lt;br /&gt;
| B || 149139 || 140940&lt;br /&gt;
|-&lt;br /&gt;
| C || 715868 || 751678&lt;br /&gt;
|-&lt;br /&gt;
| D || 7159 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c: Anwendungsbereich===&lt;br /&gt;
RPKM und TPM werden genutzt um die Expression verschiedener Gene, aus der gleichen Probe, einer RNA Sequenzierung miteinander zu vergleichen. Sie sind also Normalisierungsverfahren innerhalb eines Experiments.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe 3: Normalisierung zwischen Proben==&lt;br /&gt;
==a: Normalisierungsmethode==&lt;br /&gt;
Für die Normalisierung zwischen Proben wird TMM eingesetzt. TMM steht für 'Trimmed mean of M – Values normalization method'.&lt;br /&gt;
==b: Wieso wird die Normalisierung bei RNASeq-Proben angewendet?==&lt;br /&gt;
TMM wird für die Normalisierung von RNASeq-Daten angewendet, um die Expression eines Gens unter verschiedenen Bedingungen zu vergleichen (Bspw, ob es in Krebszellen stärker oder schwächer exprimiert wird als in gesunden Zellen)&lt;br /&gt;
&lt;br /&gt;
==c. Normalisierung mit TMM==&lt;br /&gt;
'''1.''' Der Gewichtungsfaktor für das Expressionsverhältnis für Gen 'g' zwischen Probe 'k' ' und 'k' wird bestimmt. Dabei werden kleinere Werte verstärkt und große abgeschwächt. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} =  \frac{ N_\text{k} - Y_\text{gk}}{N_\text{k} \cdot Y_\text{gk}}  +  \frac{ N_\text{k`} - Y_\text{gk`}}{N_\text{k`} \cdot Y_\text{gk`}} &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''2.''' Der Mittelwert aller Expressionsverhältnisse wird berechnet. &amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = log_2  \dfrac { \dfrac {Y_\text{gk}}{N_\text{k}}}{ \dfrac {Y_\text{gk`}}{N_\text{k`}}}  &amp;lt;/math&amp;gt; || Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; = Beobachtete Anzahl an reads für Gen 'g' und Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
N&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt; = Gesamtanzahl an reads für Probe 'k' &amp;lt;br&amp;gt;&lt;br /&gt;
k' = 2. Probe (Referenz-Bedingung)&lt;br /&gt;
|}&lt;br /&gt;
'''3.''' Die gewichteten Mittelwerte aller Expressionsverhältnisse werden berechnet. Einsetzen der in 1. und 2. ermittelten Werte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;math&amp;gt; TMM = 2^{log_2 (TMM_\text{k}^\text{k`})} &amp;lt;/math&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formel               !! Parameter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt; log_2 (TMM_\text{k}^\text{k`}) =  \frac{ \underset {g \in G}{\sum}   W_\text{gk}^\text{k´} \cdot M_\text{gk}^\text{k´}} { \sum_{g \in G} W_\text{gk}^\text{k´}} &amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Mittelwerte aller Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;  W_\text{gk}^\text{k`} = &amp;lt;/math&amp;gt; Gewichtungsfaktor der Expressionsverhältnisse &amp;lt;br&amp;gt;&lt;br /&gt;
G = Set aller Gene&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Bedingungen für dieses Verfahren:''' &amp;lt;br&amp;gt;&lt;br /&gt;
* Y&amp;lt;sub&amp;gt;gk&amp;lt;/sub&amp;gt; , Y&amp;lt;sub&amp;gt;gk'&amp;lt;/sub&amp;gt; &amp;gt; 0&lt;br /&gt;
* Die oberen und unteren 30 % der &amp;lt;math&amp;gt; M_\text{gk}^\text{k`} &amp;lt;/math&amp;gt; Werte werden nicht berücksichtigt&lt;br /&gt;
* Die 5 % am höchsten und niedrigsten exprimierten Gene werden nicht berücksichtigt&lt;/div&gt;</summary>
		<author><name>Mka</name></author>
	</entry>
</feed>