ubuntuusers.de

Fragen zu Python

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

phst

Anmeldungsdatum:
24. Juni 2007

Beiträge: 527

Das ist im allgemeinen nicht richtig; hier ist ein Beispiel: http://www.python.org/doc/essays/list2str.html

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Meine Behauptung ist im allgemeinen richtig. Die verlinkte Seite hat damit nichts zu tun. Ausserdem würde ich die mit Vorsicht geniessen, denn string.joinfields() ist schon seit Ewigkeiten "deprecated".

Folgender Quelltext-Schnippsel wobei i und x an ganze Zahlen gebunden sind und i < len(a) gilt:

1
2
a[i] = x
print a[i]

Falls a eine Liste ist, wird bei der Zuweisung einfach eine Referenz auf ein int-Objekt in die Liste kopiert und bei der Ausgabe über eine Referenz auf ein int-Objekt zugegriffen. Falls a aber ein array.array ist, wird bei der Zuweisung das int-Objekt hergenommen und in eine "C-Ganzzahl" abhängig vom array.typecode umgewandelt. Das mag noch relativ schnell gehen, ist aber mehr Aufwand als einfaches kopieren eines Zeigers auf C-Ebene. Bei der Ausgabe passiert noch mehr zusätzliche Arbeit, weil hier ein neues Python-Objekt beim Zugriff erstellt wird. Diese beiden Operationen sind deshalb im Allgemeinen langsamer als bei einer Liste, wo nichts konvertiert werden muss.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Eine Frage hätte ich dann doch noch.

Wieso geht sowas nicht?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
f = open('DATEI')


text = [100]

i = 0
for line in f:
	text[i] = line
	print text[0]
	i = i+1

rocco_storm Team-Icon

Avatar von rocco_storm

Anmeldungsdatum:
3. November 2005

Beiträge: 1811

Wohnort: Ruhrpott

BodomBeachTerror schrieb:

Wieso geht sowas nicht?

Was hast du denn vor?

1
2
3
4
f = open('DATEI')
text = []
for line in f:
	text.append(line)

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

@BodomBeachTerror: Weil man nur an Indexe zuweisen kann, die auch existieren. Arbeite mal das Tutorial aus der Dokumentation durch und mach Dir klar, was Zeile 4 macht.

Selbst wenn die Zeile das machen würde, was Du anscheinend denkst, wäre das keine gute Idee, denn was sollte denn in der Liste sein, wenn die Datei weniger als 100 Zeilen hat, oder noch "schlimmer", mehr als 100 Zeilen!?

Warum willst Du so etwas überhaupt machen? Dass das einlesen von Zeilen in eine Liste viel einfacher geht, wurde doch schon gezeigt. Wenn man in Python "manuell" einen Index hochzählt, macht man in 99,9% der Fälle etwas falsch. Python ist nicht C.

@rocco_storm: Was jetzt aber wieder eine unnötig kompliziertere Variante von text = f.readlines() oder text = list(f) ist.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

JA ich glaub auch das ich etwas C geschädigt bin 😀

Aber danke so funktioniert es ^^

rocco_storm Team-Icon

Avatar von rocco_storm

Anmeldungsdatum:
3. November 2005

Beiträge: 1811

Wohnort: Ruhrpott

Marc 'BlackJack' Rintsch schrieb:

@rocco_storm: Was jetzt aber wieder eine unnötig kompliziertere Variante von text = f.readlines() oder text = list(f) ist.

Mir ging es jetzt um das Initialisieren und Anhängen von Elementen bei Listen. Aber natürlich hast du recht ☺

Nilres

Anmeldungsdatum:
7. Dezember 2006

Beiträge: 371

Marc 'BlackJack' Rintsch schrieb:

Python ist nicht C.

ABER Pyhton ist in C (geschrieben).

Ich weiß tut im Prinzip nichts zur sache aber ich wollte es trozdem loswerden.

mfg nils

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

@Nilres: Nur CPython ist in C geschrieben. IronPython in C# und Jython in Java. PyPy in C und einer Untermenge von Python.

Nilres

Anmeldungsdatum:
7. Dezember 2006

Beiträge: 371

Wo ist da jetzt der unterschied? http://svn.python.org/view/python/trunk/ Da ist doch recht viel in C geschrieben?!

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

@Nilres: Ich verstehe die Frage nicht!? Der Unterschied zu oder zwischen was? Du hast die Quelltexte von CPython verlinkt, und das ist, oh Wunder, in C geschrieben. IronPython und Jython aber eben nicht und PyPy nur zum Teil.

Ferio Team-Icon

Avatar von Ferio

Anmeldungsdatum:
24. April 2007

Beiträge: 383

BodomBeachTerror schrieb:

Eine Frage hätte ich dann doch noch.

Für

1
2
3
4
i = 0
for line in f:
    #code
    i += 1

kann man meist auch einfach

1
2
for i, line in enumerate(f):
    #code

schreiben.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Ok eine Frage hab ich noch xD

Und zwar wie kann man so was machen:

(Ich weiß, ich versuche meine C Kenntnisse verzweifelt anzuwenden 😀)

1
2
i = 0
print text[i]

Geht so etwas überhaupt? 😳 Und i ist nicht immer 0 sondern des wird eben erhöht in einer for Schleife

Ach ja ich hab mir diverse Sachen durchgelesen, aber wirklich nichts dazu finden können ^^

––––––––-edit-–––––––––––––––––

Hier mal der ganze Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/python

	
	

f = open('datei')



text = []

for line in f:
	text.append(line)
	

i = 0


for i in f:
	print text[i]

So das funktioniert aber nicht. Es liegt an dem 2ten "f". Ich hoffe ihr versteht was ich erreichen möchte und könnt mir helfen 🙄

gkuhl

Avatar von gkuhl

Anmeldungsdatum:
1. Dezember 2007

Beiträge: 99

Wohnort: Hong Kong

1
2
3
f = open('datei')
for line in f:
    print line

wenn du wirklich nur die Zeilen der Datei ausgeben willst. Vielleicht wäre es ganz sinnvoll, wenn du dir mal ein Tutorial anschaust.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Es geht ja nicht darum sie anzuzeigen, ich will sie ja eigentlich analysieren können. Also will ich durch die Zeilen durch gehen während sie in der Liste sind und ich dachte das geht ja wohl am einfachsten, wenn ich das einfach mit einer Variable machen.

Ja ich schau mir noch ein paar an, aber alle die ich schon durch habe gehen nicht auf mein Problem ein