2016-10-16 8 views
1

にいくつかの特定の番号を含むリストから番号を削除します。一覧を考えるのpython

l = [1,32,523,336,13525] 

私はいくつかの特定の関数の出力として数23を持っています。今

私はいくつかのクールな1つのライナーコードを書きたい2または3または両方の2と3

Output should be:[1] 

のいずれかを含むリストからすべての数字を削除します。

助けてください!

私のアプローチがあった。

1)文字列のリストにint型のリストに変換します。

2)このような文字2文字または3のいずれかをチェックするためにforループを使用します。どのように))

3本のラインでも3、整数にリストを変換するための A=[x for x in l if "2" not in x](わかりませんリスト使用:それは数23の文字列への変換を含むだけでなく、list.Iのすべての数字がすぐに整数リストにやりたいよう

B= [int(numeric_string) for numeric_string in A]

をこのプロセスは退屈な静かです。

+3

あなたはこれまでにどのようなコードを作りましたか? 1ライナーまでは時々クールになることがありますが、コードを書くためのPythonの方が一般的には、より多くの行があっても、はっきりと分かりやすくなります。 – coralvanda

+1

「one-liner」!= pythonic。 –

+0

大丈夫@ juanpa.arrivillaga、どんな助けもありがとう! –

答えて

3

あなたは文字のセットに番号を変換することができます:あなたはfilter機能を探している

>>> values = [1, 32, 523, 336, 13525] 
>>> number = 23 
>>> [value for value in values 
... if set(str(number)).isdisjoint(set(str(value)))] 
[1] 
+0

驚くべき答え、ここでは両方を変換していません。 isdisjointを使用して文字列配列に個々の値を設定します。交差点があるかどうかをチェックします。交差点がない場合は、それ以外の場合は値を返しません。 –

0

。あなたはint型のリストを持っているし、あなただけの奇妙なものをしたいと言う:

def is_odd(val): 
    return val % 2 == 1 

filter(is_odd, range(100)) 

またはリスト内包

[x for x in range(100) if x % 2 == 1] 

特にリストの内包が完全にPython的です。今必要なのは、あなたの特定のニーズにブール値を返す関数です。