2017-07-06 22 views
1

私は以下のように、などの文字、記号、数字を含むことができる文字列のリストを持っている:エキス8桁の数字は

list = ['\n', '', '0', '38059', '', '', '?_', '71229366', '', '1', '38059', '', '', '?_', '87640804', '', '2', '38059', '', '', '?_', '71758011', '', '', ':?', ';__', '71229366287640804271758011287169822'] 

私は除いて、他のすべての文字列をフィルタリングするにはどうすればよいです10000000未満の数値と99999999以上の数値?

予想される出力は:あなたは新しいリストを作る気にしない場合は

list = ['71229366', '87640804', '71758011'] 
+1

*すべての文字*はどういう意味ですか? – RomanPerekhrest

+4

ここに '[] 'という文字がない出力があります –

+0

' list = None'を試してください – Jon

答えて

3

、あなたはあなたがmapfilter使用することができます

filtered_list = [i for i in list if i.isdigit() and 10000000 < int(i) < 99999999] 
3

のような単なるリスト内包して何かを試すことができます。

your_list = ['\n', '', '0', '38059', '', '', '?_', '71229366', '', '1', '38059', 
      '', '', '?_', '87640804', '', '2', '38059', '', '', '?_', '71758011', 
      '', '', ':?', ';__', '71229366287640804271758011287169822'] 

new_list = list(map(int, filter(lambda x: x.isdigit() and 10000000 < int(x) < 99999999, your_list))) 
print(new_list) 

list() python2ではオプションです。

出力:

[71229366, 87640804, 71758011] 

あなたはmapをドロップすると、変換が整数にしたくない場合は、次の

>>> list(filter(lambda x: x.isdigit() and 10000000 < int(x) < 99999999, your_list)) 
['71229366', '87640804', '71758011'] 
1
def valid(v): 
    try: 
     value = int(v) 
     return 10000000 <= value <= 99999999 
    except: 
     return False 

output = [x for x in list if valid(x)] 

説明

有効な機能を条件として使用して、リスト内のすべての値をフィルタリングします。

1
data = ['\n', '', '0', '38059', '', '', '?_', '71229366', '', '1', '38059', 
     '', '', '?_', '87640804', '', '2', '38059', '', '', '?_', '71758011', 
     '', '', ':?', ';__', '71229366287640804271758011287169822'] 

res = [] 
for e in data: 
    try: 
     number = int(e) 
    except ValueError: 
     continue 
    if 10000000 < number < 99999999: 
     res.append(str(number)) 

プリント(RES)

print(res) 

出力:

['71229366', '87640804', '71758011'] 
0

正規表現を使用して、私はシンプルかつ効率的な答えを提供してみましょう。 map(元のリストを複製する)、またはすべてをintに変換する必要はありません。あなたは、基本的にはあなたのリストにあるすべての8桁の整数を維持する方法求めている:

>>> filter(re.compile('^\d{8}$').match, data) 
['71229366', '87640804', '71758011'] 

我々compile標準にregex.matchの部分的なアプリケーションを提供することで、リストを正確に8桁の数字と一致した後、フィルタの正規表現filter機能。

関連する問題