2016-11-27 10 views
0

2桁の整数を分割せずにforループを使ってリストに追加するにはどうすればいいですか?たとえば、私はコンピュータに10,14,13,15を与え、私は1,0,1,4,1,3,1,5のようなものを手に入れます。私はこれを一周しようとしたが、私はエラータイプで新しい問題、になってしまった:シーケンス項目0:int型が見つかった、期待の文字列をリストと結合関数に関するPythonの問題

def GetNumbers(List): 
    q=[] 
    Numberlist = [] 

    for i in List: 
     if i.isdigit(): 
      q.append(int(i)) 
     else: 
      Numberlist.append(''.join(q[:])) 
      del q[:] 

    return Numberlist 
+0

リストを反復処理している間はリストを変更します。あなたは何もしないでください。 –

+0

また、 'del q [:]'の必要はありません。最初に変数を使用したときに変数が参照されていないので、既にガベージコレクションされています。 – danidee

+0

一時リストを変更しています。リストに10があり、リストのforループを実行すると、コンピュータは10の代わりに1と0として読み込みます。 –

答えて

0

あり方としてstr.split()機能を使用するようになります。

あなたは split()を使用することはできません述べたことから、あなたに文字列から数字を抽出するために regex表現を使用することができ
>>> my_num_string = "10,14,13,15" 
>>> my_num_string.split(',') 
['10', '14', '13', '15'] 

しかし、:エルス

>>> import re 
>>> re.findall('\d+', my_num_string) 
['10', '14', '13', '15'] 

、あなたが任意の空想の方法で行くことにしたくない場合は、あなたのように簡単なforループでそれを達成することができる:

num_str, num_list = '', [] 
#^Needed for storing the state of number while iterating over 
# the string character by character 

for c in my_num_string: 
    if c.isdigit(): 
     num_str += c 
    else: 
     num_list.append(num_str) 
     num_str = '' 

num_list内の数字はstrの形態であろう。それらをintに変換するには、明示的に次のように変換することができます:

num_list = [int(i) for i in num_list] # OR, list(map(int, num_list)) 
関連する問題