2017-05-11 8 views
1

Unten ist die Liste, wo ich Zeichenfolge und Ganzzahlen trennen möchte.Entfernen von Ganzzahlen aus einer Liste + Python

Diese Liste gibt mir korrektes Ergebnis:

list_a = ["Michell",123,"Apple","Food",456,"Another"] 
list_e = [] 
x = 0 

for item in list_a: 
    print("x is: ", x) 
    print("item is: ", item) 
    if isinstance(item,int): 
     list_e.append(item) 
     list_a.pop(x) 

    x+=1 
print(list_a) 
print(list_e) 

Das Problem beginnt, wenn ich ein Element hinzufügen, wie unten zur Liste: Added ein Element 3231 nach 456 ...

>>> list_a = ["Michell",123,"Apple","Food",456,3231,"Another"] 
... 
['Michell', 'Apple', 'Food', 3231, 'Another'] 
[123, 456] 

Was ist Das Problem hier?

+0

FYI: i nicht anderer Leute Beiträge editieren, aber 'intergers' ist ein Tippfehler im Titel! –

Antwort

2

Das Problem ist:

  1. Sie über die Liste iterieren, wie Sie Artikel von ihm entfernen, und
  2. Ihre Zählvariable x nimmt nicht berücksichtigt, die Positionen der entfernten Gegenstände.

Try this:

list_a = ["Michell",123,"Apple","Food",456,3231,"Another"] 
list_e = [] 
x = 0 

for item in list_a[:]: 
    print "x is: ", x 
    print "item is: ", item, type(item) 
    if isinstance(item,int): 
     list_e.append(item) 
     list_a.pop(list_a.index(item)) 

    x+=1 
print list_a 
print list_e 

Siehe auch:

(1), (2), (3)

+0

'list_a.pop (list_a.index (item))' wäre einfacher als 'list_a.remove (item)', aber es wäre immer noch falsch, wenn doppelte Elemente beteiligt sind. Um es richtig zu machen, möchten Sie wahrscheinlich entweder eine neue "Liste" (mit dem zu haltenden Wert) neu erstellen, dann en-Masse ersetzen oder umgekehrt und verwenden Sie enumerate, um den genauen Index zum Löschen zu erhalten. – ShadowRanger

+0

@Nolan Du hast es geschafft – danny

0

@NolanConaway die akzeptierte Antwort sein sollte.

Das heißt, nur um zu zeigen, wenn Sie und pop() nicht verwenden eine Kopie der Liste verwenden möchten, werden Sie Ihre list_a ab Ende durchlaufen müssen, um Ihre x außer Reichweite zu vermeiden. Hier ein Beispiel:

list_a = ["Michell", 123, "Apple", "Food", 456, 3231, "Another"] 
list_e = [] 

for x, item in reversed(list(enumerate(list_a))): 
    print "x is: ", x 
    print "item is: ", item, type(item) 
    if isinstance(item,int): 
     list_e.append(item) 
     list_a.pop(x) 

print list_a 
print list_e 

Will Ausgang:

x is: 6 
item is: Another <type 'str'> 
x is: 5 
item is: 3231 <type 'int'> 
x is: 4 
item is: 456 <type 'int'> 
x is: 3 
item is: Food <type 'str'> 
x is: 2 
item is: Apple <type 'str'> 
x is: 1 
item is: 123 <type 'int'> 
x is: 0 
item is: Michell <type 'str'> 
['Michell', 'Apple', 'Food', 'Another'] 
[3231, 456, 123] 
0
list_a = ["Michell",123,"Apple","Food",456,3231,"Another"] 
numlist=[]    #number list 
strlist=[]    #string list 

for i in list_a: 
    if((type(i))== int):  #to find the data type 
     numlist.append(i) 

    else: 
     strlist.append(i) 

print numlist 
print strlist 

Hoffnung ist klar und es funktioniert ....

Verwandte Themen