2016-06-29 11 views
0

Ich bin neu in Python und immer noch damit kämpfen. Also können Sie mir dabei helfen?Neue Liste der Liste mit einer Bedingung der anderen Liste machen

Ich habe diese Liste der Listen:

sorted_Region: [[J, 0.80, 0.30], [H, 0.80, 0.21], [I, 0.87, 0.19], [G, 0.88, 0.15], [D, 0.96, 0.14], [B, 0.97, 0.14], [A, 1.01, 0.11], [C, 1.05, 0.15], [F, 1.06, 0.04], [E, 1.55, 0.22]] 

Und ich möchte neue Liste von Listen mit Bedingung machen: , wenn die nächste Liste zweiten Elementwert größer oder gleich dem zweiten Element der aktuellen Liste UND Die nächste Liste hat einen dritten Elementwert kleiner als das dritte Element der aktuellen Liste.

habe ich versucht, diesen Code

Region_frontier = [] 
for i in sorted_Region: 
    if i+1[1] >= i[1] and i+1[2] < i[2]: 
     Region_frontier.append(i) 
print Region_frontier 

, aber ich habe diese Fehlermeldung.

TypeError: 'int' object has no attribute '__getitem__' 

bitte bitte helfen Sie mir. Vielen Dank im Voraus ^^

+1

Können Sie erklären, was das mit C++ zu tun hat? –

+0

im sorry .. muss die Tags entfernen :) –

+0

@DiniKF Nur um Ihnen mit der Terminologie zu helfen, da Sie gerade mit Python beginnen, was Sie haben, ist eine Liste von Listen, nicht eine Reihe von Tupeln. Eine Menge ist eine eindeutige Datenstruktur mit sehr unterschiedlichen Eigenschaften gegenüber einem Tupel oder einer Liste. Daher kann die Verwendung des Wortes "set" für "list" zu Verwirrung führen. –

Antwort

1

Sie versuchen, Index-Operator auf integer zu verwenden, die bewirkt, der Fehler: i+1[1]. Stattdessen Indizierung der Verwendung können Sie die Paare auf der Liste iterieren mit zip und islice:

from itertools import islice 

Region_frontier = [] 
for prev, cur in zip(sorted_Region, islice(sorted_Region, 1, None)): 
    if cur[1] >= prev[1] and cur[2] < prev[2]: 
     Region_frontier.append(cur) 
+0

Vielen Dank ^^ –

-1
for index in range(len(sorted_Region)-1): 
    if sorted_Region[index+1][i] >= sorted_Region[index][1] and sorted_Region[index+1][2]<sorted_Region[index][2]: 
     Region_frontier.append(i) 
print Region_frontier 
+0

Vielen Dank, es hilft, mehr über Python zu verstehen :) –

0

Für i+1[1] ist die indizierte Element von ‚int‘ Objekt immer schlecht Grammatik. Für den vorgesehenen Zweck, kein Index in der for-Schleife für sorted_Region, so ist es nicht möglich, die "previous tuple" zu bekommen.

Um die sorted_Region und vergleichen Sie zu den nahe gelegenen Punkt iterieren, verwenden Tupelindex (real Index i die von 0 bis len(sorted_Region) - 1 reicht) versuchen:

Region_frontier = [] 
for i in range(0, len(sorted_Region) - 1): 
    if sorted_Region[i+1][1] >= sorted_Region[i][1] and sorted_Region[i+1][2] < sorted_Region[i][2]: 
     Region_frontier.append(i) 
print Region_frontier 
+0

Vielen Dank, es hilft, mehr über Python zu verstehen :) –

1

Zu allererst Ich gehe davon aus, dass durch vorherigen meinen Sie das aktuellen Element, das Sie iterieren. Auch möchte ich erwähnen, dass Sie eine Liste von Listen haben, nicht eine Reihe von Tupel. Da Python solche Schlüsselwörter hat, sollten Sie bei der Verwendung dieser Wörter vorsichtig sein. Nun sprechen Sie über Ihr Problem

Das Problem ist, dass Sie über 'int' keine Liste iterieren. Wenn Sie tun, i in sorted_Region 'i' ist ein Element dieser Liste nicht sein Iterator. So können Sie folgendes tun

Region_frontier = [] 
i = 0 
while i < len(sorted_Region)-1: 
    if sorted_Region[i+1][1] >= sorted_Region[i][1] and sorted_Region[i+1][2] < sorted_Region[i][2]: 
     Region_frontier.append(sorted_Region[i]) 
print(Region_frontier) 
Verwandte Themen