2017-08-28 13 views
1

私は整数のリストを持っており、その中に7,8,9、または0のすべての整数を取り除きたいと思います。数字を基にしたPythonのリストから要素を削除する

これは私がこれまでにやっていることです:

import numpy as np 
def P(n): 
    list = [] 
    for i in range(10**(n-1),7*10**(n-1)): 
     list.append(i) 
    for i in list: 
     for k in str(i): 
      if k in ['7','8','9','0']: list.remove(i) 
      #elif k == '8': list.remove(i) 
      #elif k == '9': list.remove(i) 
      #elif k == '10': list.remove(i) 
    return list 

をしかし、それは、これを返します。

[11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 46, 48, 50, 51, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 68] 

それは、不要な値を取り除くように、私はこのコードを修正するにはどうすればよいですか?つまり、18,20,28,30など。

+0

過度の狂気を繰り返すリストを変更しないでください。また、pythons組み込み型を隠す変数 'list'を指定しないでください。 'もしstr(i)のcのための' 7890 'に含まれていない)ならば、範囲(10 **(n-1)、7 * 10 ** – AChampion

答えて

3

リストの理解度と組み込みのany()メソッドを使用してリストを再作成し、不要なリストに桁があるかどうかを確認できます。入力する番号を反復するには、最初にstr()にキャストします。たとえば:

def P(n): 
    l = [] 
    for i in range(10**(n-1),7*10**(n-1)): 
     l.append(i) 
    l = [x for x in l if not any(y in ['7', '8', '9', '0'] for y in str(x))] 

出力:

[11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 61, 62, 63, 64, 65, 66] 

また、使用してループの初期リストと作成を避けることができます。

def P(n): 
    l = range(10**(n-1),7*10**(n-1)) 
    l = [x for x in l if not any(y in ['7', '8', '9', '0'] for y in str(x))] 
0

まず第一には、リストを反復処理する前に、コードを変更しますto list = range(10 ** n-1,7 * 10 ** n-1) rangeはリストを返します。リストを反復してコピーする必要はありません。 2番目のループでは、kはlist内のすべての文字列の文字を繰り返します。リスト中のiについて : におけるkの[ '7'、 '8'、 '9'、 '0']: どうかでK: list.remove(I)

1

別のフィルタテストオプションPythonのforで繰り返し処理を行う場合、リストを修正することに対する警告がターゲット

にいる間ならば、一般的な意味で「反復」しながら、あなたは文字通りリストを変更することができset交差点

n=2 
print([i for i in range(10**(n-1),7*10**(n-1)) 
     if not {'7','8','9','0'} & set(str(i)) 
     ]) 
[11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 61, 62, 63, 64, 65, 66] 

を使用することで、インデックスの変更方法、completiのテスト方法on

n =2 
lst = list(range(10**(n-1),7*10**(n-1))) 
i = 0 
while i < len(lst): 
    if {'7','8','9','0'} & set(str(lst[i])): 
     lst.pop(i) 
    else: 
     i += 1 
関連する問題