2016-04-05 14 views
1

Ich versuche, einen Code für die Operation zwischen jedem Element mit allen anderen Elementen einer Liste, aber nicht mit sich selbst zu schreiben. Unten ist der Code.Position in Python-Listen

list = [10,20,30,30,40,50,50,50,60,70]; 
for i in list: 
     sum=i; 
     for j in list: 
       if list.index(i) != list.index(j): 
         s=(50-((j-i)/2))*0.13; 
         sum+=s; 
     print("score of %d is %f"%(i,sum)); 

Aber immer noch funktioniert der Code nicht. Es erfüllt nicht den if Zustand von Positionen.

+1

Bitte die erwartete Ausgabe hinzufügen, da die Frage keinen Sinn für mich ergibt ... –

+0

30 wird wiederholt. Im Wiederholungsfall werden alle Duplikate ausgeschlossen. Wird das erwartet? –

+0

Duplikate sollten nicht ausgeschlossen werden .... i & j sollte nicht zur selben Position gehören .... zB: 30 in Position 3 sollte mit 30 in Position 4 arbeiten, aber nicht mit 30 in Position 3 –

Antwort

1

Sie können enumerate verwenden, um den Index zu erhalten. Dies kann Folgendes tun:

lis = [10, 20, 30, 30, 40, 50, 50, 50, 60, 70] 

for idx1, el1 in enumerate(lis): 
    sum_ = el1 
    for idx2, el2 in enumerate(lis): 
     if idx1 != idx2: 
      sum_ += (50 - (el2 - el1)/2) * 0.13 
     print("score of %d is %f"%(idx1, sum_)) 
+0

Ich denke, die 'print()' ist zu weit eingerückt. Es sollte mit dem 'für idx2, el2 ... 'übereinstimmen. – RootTwo

+0

Das' print() 'dient nur zum Debuggen und zeigt an, was vor sich geht. Zum Beispiel können Sie sehen, dass sich die Summe nicht ändert, wenn beide Indizes gleich sind, d. H. Einmal für jede innere Schleife. –

+0

Es funktioniert ... Danke :) –