2017-07-17 6 views
1

Ich habe zwei Listen mit Zeilennummern von Anfang und Ende der spezifischen Feeds aus einer Textdatei angehängt: startPosOfFeeds = [1, 35] und endPosOfFeeds = [34, 56] Ich möchte verwandeln diese beiden Listen in eine Liste von Tupeln wie diese : list_of_tuples = [(1,34), (35, 56)]Haben Sie Probleme Tupeln auf eine Liste von Tupeln

Da ich den obigen Vorgang nur, wenn len(startPosOfFeeds) == len(endPosOfFeeds)

My-Code durchführen würde:

numOfFeeds = len(startPosOfFeeds) 
print(numOfFeeds) 
print(startPosOfFeeds) 
print(endPosOfFeeds) 

for i in range(numOfFeeds): 
    list_of_tuples = [] 
    print(i) 
    print(str(startPosOfFeeds[i])+'......'+str(endPosOfFeeds[i])) 
    list_of_tuples.append(startPosOfFeeds[i],endPosOfFeeds[i]) 
print(list_of_tuples) 

Falsche Ausgabe:

2 
[1, 35] 
[34, 56] 
0 
1......34 
1 
35......56 
[(35, 56)]  

Ich bin nicht sicher, warum die Liste list_of_tuples nur den letzten angehängten Wert hält.

+0

Es ist ein 'list' kein' array'. Ich hoffe, es macht Ihnen nichts aus, dass ich Ihre Frage bearbeitet habe, um das zu reflektieren. – MSeifert

+0

Sowohl die Frage als auch die Antwort wird ein 'TypeError werfen: append() dauert genau ein Argument' –

+0

@JaredGoguen Guter Fang, zumindest die Antwort ist jetzt korrigiert :) – MSeifert

Antwort

4

Sie eine leere Liste erstellen jede Iteration:

for i in range(numOfFeeds): 
    list_of_tuples = [] # <-- this creates the empty list in each iteration 
    ... 
    list_of_tuples.append((startPosOfFeeds[i],endPosOfFeeds[i])) 

Die Lösung ist ganz einfach: Legen Sie die list_of_tuples = [] vor der Schleife:

list_of_tuples = [] 
for i in range(numOfFeeds): 
    ... 
    list_of_tuples.append((startPosOfFeeds[i],endPosOfFeeds[i])) 

Beachten Sie, dass Sie auch nutzen könnten zip und eine Liste-Verständnis stattdessen:

list_of_tuples = [(startpos, endpos) for startpos, endpos in zip(startPosOfFeeds, endPosOfFeeds)] 

Oder werfen nur die zip auf ein list:

list_of_tuples = list(zip(startPosOfFeeds, endPosOfFeeds))