2016-03-24 7 views
0

Ich versuche, die Liste einzeln zu leeren, aber es sind immer 2 ganze Zahlen übrig. Ist es möglich, es ohne die 2 höchsten Ganzzahlen zu verlassen? Wenn das so ist, wie ?Wie subtrahiere ich von einer Liste um den kleinsten Wert in der Liste?

list = [1,2,3,4,5] 
print (list) 
for x in list: 
    while x in list: 
     list.remove(min(list)) 


print(list) 
+0

Wenn Sie mithilfe 'for' Schleife eine Liste leeren möchten, sollten Sie es den umgekehrten Weg machen. Überprüfen Sie [this] (http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686) Andernfalls wird Ihr Indexer das Ende der Liste erreichen, bevor Sie alle Ihre Artikel durchgehen . Wenn Sie vorwärts gehen, wird ein Element in der Liste entfernt, wenn sich der Indexer vorwärts bewegt. Es kann den Iterationsfluss stören. Allerdings ist die Verwendung von for-Schleife nicht die einzige Möglichkeit, eine Liste zu leeren. – Ian

Antwort

0

Es gibt eine andere Möglichkeit, eine list zu leeren. Auf diese Weise müssen Sie die for-Schleife nicht verwenden.

>>> lst = [1,2,3,4,5] 
>>> del lst[:] 
>>> lst 
[] 
>>> 

Oder:

>>> lst = [1,2,3,4,5] 
>>> lst[:] = [] 
>>> lst 
[] 
>>> 

Wenn Sie wirklich das list ein Element zu der Zeit leeren wollen, die nicht viel Sinn macht, können Sie eine while Schleife verwenden.

lst = [1,2,3,4,5] 
x = len(lst)-1 
c = 0 
while c < x: 
    for i in lst: 
     lst.remove(i) 
    c = c+1 
print (lst) 
>>> 
[] 
>>> 
+0

Oder 'lst [:] = []' –

+0

@PeterWood Ja, ich werde meinen Beitrag bearbeiten –

0

Ich habe das Gefühl, kann es auf Ihre Frage mehr sein, sondern eine Liste Sie können leeren klar es mit python3:

lst = [1,2,3,4,5] 
lst.clear() 

Wenn Sie tatsächlich jede min wollen und haben ein gehen von einem halten, bis die Liste geht leer ist:

lst = [1, 2, 3, 4, 5] 

while lst: 
    i = min(lst) 
    lst.remove(i) 
    print(i, lst) 
0

Wenn Sie möchten, wiederholt das kleinste Element in dieser Liste entfernen und es irgendwie zu verarbeiten, anstatt nur cl die Liste Earing, können Sie dies tun:

while list: # short way of saying 'while the list is not empty' 
    value = min(list) 
    process(value) 
    list.remove(value) 

(dies nicht der effizienteste Code ist, wie es einmal das Minimum zu finden iteriert und wieder zu entfernen, aber es zeigt die Idee)

Ihre Problem ist, dass Sie eine for-Schleife auf einer Liste verwenden, während Sie sie ändern, was zwangsläufig zu Problemen führen wird, aber es gibt überhaupt keine Notwendigkeit für eine for-Schleife.

Verwenden Sie auch nicht list als Variablenname, da es den eingebauten Namen schattiert, der für andere Zwecke sehr nützlich ist.

0

Ich denke, das ist, was Sie zu tun versuchen:

lst = [1,2,3,4,5] 
while lst:   # while the list is not empty 
    m = min(lst) 
    while m in lst: # remove smallest element (multiple times if it occurs more than once) 
     lst.remove(m) 
Verwandte Themen