Listen durch Schleife erzeugen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Birnenkern
User
Beiträge: 5
Registriert: Sonntag 19. Mai 2019, 20:00

Guten Abend Python-Gemeinde,

mein Problem: Ich möchte gerne viele Listen mithilfe einer For-Schleife erzeugen, es geht darum das ich eine menge Namen in einer Excel Datei habe und diese nun unter Team 1, Team 2 etc einspeichern möchte...
Für das Auslesen der Excel verwende ich openpyxl.

Bei meiner Frage geht es lediglich darum wie ich listen nicht manuell erstelle sondern sie mir durch eine schleife erstellen lassen so dass ich einen String mit "Team" habe und anschließend die Variable x mit 1,2,3,4 und so weiter..

An Code habe ich einiges versucht bin aber mächtig am verzweifeln.. Aktuell schaut die Funktion wie folgt aus:
Ja ich verstehe dass der Code so leider aktuell nicht funktioniert aber vielleicht sehr ihr mein problem hier deutlicher:

Code: Alles auswählen

	def teamlistenerstellen(self):
		counterfuerteamname = 0
		for row in range(1, self.sheet.max_row + 1):
			counterfuerteamname += 1
			test = self.sheet.cell(1,row)
			"Team" + str(counterfuerteamname) = list(test.value)	#hier soll eig. eine Liste erzeugt werden... (diese Zeile mag ich ausbessern mit eurer Hilfe)
			print(test)
Für erfahrene Nutzer wird dies vermutlich sehr einfach sein.

Ich danke euch schon jetzt!
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Birnenkern: Du willst keine durchnummerierten Variablennamen, und schon gar nicht dynamisch erzeugen, sondern eine Liste mit Listen.

Bei `counterfuerteamname` (und beim Methodennamen) fehlen Unterstriche damit man das lesen kann. Der Wert ist auch redundant, weil das immer der gleiche wie `row` ist:

Code: Alles auswählen

    def erstelle_teamlisten(self):
        teams = list()
        for row in range(1, self.sheet.max_row + 1):
            teams.append(list(self.sheet.cell(1, row).value))
        
        # ...
Beziehungsweise mit einer „list comprehension“:

Code: Alles auswählen

    def erstelle_teamlisten(self):
        teams = [
            list(self.sheet.cell(1, row).value)
            for row in range(1, self.sheet.max_row + 1)
        ]
        # ...
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Birnenkern
User
Beiträge: 5
Registriert: Sonntag 19. Mai 2019, 20:00

__blackjack__ hat geschrieben: Samstag 25. Mai 2019, 00:51 @Birnenkern: Du willst keine durchnummerierten Variablennamen, und schon gar nicht dynamisch erzeugen, sondern eine Liste mit Listen.

Bei `counterfuerteamname` (und beim Methodennamen) fehlen Unterstriche damit man das lesen kann. Der Wert ist auch redundant, weil das immer der gleiche wie `row` ist:

Code: Alles auswählen

    def erstelle_teamlisten(self):
        teams = list()
        for row in range(1, self.sheet.max_row + 1):
            teams.append(list(self.sheet.cell(1, row).value))
        
        # ...
Beziehungsweise mit einer „list comprehension“:

Code: Alles auswählen

    def erstelle_teamlisten(self):
        teams = [
            list(self.sheet.cell(1, row).value)
            for row in range(1, self.sheet.max_row + 1)
        ]
        # ...
Vielen Dank! Das hat mir sehr geholfen. Allerdings speichert er jeden Buchstaben in einem einzelnem String: Team 1 -> [T,e,a,m," ", 1] etc. Gibt es da eine Funktion diese Strings zu einem zusammenzufügen?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Birnenkern: das machst Du doch (un-)absichtlich selbst, indem Du den Wert der Zelle in eine Liste umwandelst `list(test.value)`.

Code: Alles auswählen

>>> list("Team 1")
['T', 'e', 'a', 'm', ' ', '1']
Wenn Du das nicht willst, lass das einfach sein.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Dann mach den Code doch einfacher:

Code: Alles auswählen

def teamlistenerstellen(self):
    start = 1
    end = self.sheet.max_row + 1
    fmt = 'Team {num}: {name}'
    for row in range(start, end):
        team = self.sheet.cell(1, row).value
        print(fmt.format(num=row, name=team))
Wenn die Funktion eine Liste ausgeben soll, musst du vorher erst eine erstellen und dann fügst du die Elemente mit jeder Iteration zur bestehenden Liste hinzu.

Code: Alles auswählen

def teamlistenerstellen(self):
    teams = [] # leere liste
    start = 1
    end = self.sheet.max_row + 1
    fmt = 'Team {num}: {name}'
    for row in range(start, end):
        team = self.sheet.cell(1, row).value
        teams.append(team) # element zur bestehende Liste hinzufügen
    return teams # fertige Liste mit Teamnamen ausgeben
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten