2017-05-11 6 views
1

以下は、文字列と整数を区切りたいリストです。リストからの整数の削除+ python

このリストは私に正しい結果を与える:

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) 
私は以下のように一覧表示する要素を追加する際の問題が開始

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

は何ですか3231 ... 456後 追加された要素をここの問題?

+0

FYI:私は他の人の投稿を編集することはできません、しかし、「intergers」はタイトルのタイプミスです! –

答えて

2

問題がある:

  1. あなたは変数xは、アカウントに削除された項目の位置を取っていないことから項目を削除し、
  2. あなたのカウンタとしてリストを反復処理しています。

これを試してみてください:

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 

も参照してください:

(1)(2)(3)

+0

'list_a.pop(list_a.index(item))'は 'list_a.remove(item)'のように簡単ですが、重複した項目が含まれている場合でも間違っています。それを正しく行うには、新しい 'list'(保持する値)を再構築し、en masseを置き換えるか、逆にループし、' enumerate'を使って削除の正確なインデックスを取得したいと思うでしょう。 – ShadowRanger

+0

@Nolanあなたはそれを釘付けにした – danny

0

@NolanConawayは受け入れ答えなければなりません。

リストのコピーを使用してpop()を使用しない場合、あなたはあなたのlist_aがあなたのxが範囲外であることを避けるために、エンドから始まる反復処理する必要がありますが、ちょうどお見せする、と述べました。次に例を示します。

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 

ウィル出力:これは明確であり、それが動作

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 

希望....

関連する問題