2017-11-04 13 views
1

除外された部分文字列にはテキストファイルが含まれていますが、除外された部分文字列を除いて入力項目をチェックして返すことを繰り返します。特定の反復されたサブストリング*が値に見つからない場合に値を返す方法?

ここでは、これを達成するためにPython 2.4を使用しています。with openanyは機能しません。

ワーキングコード:しかし、私はハードコードする部分文字列をバインドしています

def filterJunk(x): 
     return [i for i in x if not ('I' in i or 'am' in i or '#junk' in i)] 

OutPutList = [] 
for x in InputstringsList: 
    OutPutList.append(filterJunk(x)) 

問題:

しかし、私は、ストリングのn個の数字を除外するために必要がある場合は?明らかに、コード内でそれらをすべてハードコードしないので、ファイルを除外して各部分文字列を読み込み、最終値に同じものが含まれていないようにする別の方法が必要です

if値に見つからないテキストファイルの部分文字列。プロセスに

例えば

:あなたはヘルパー関数とビルトインfilter()機能でそれを行うことができます

InputstringsList = ["Icantbeapart_of_yourlist_asI_am_in_Junk", "youAre", "MeeToooo", "#junk"] 

予想される出力

OutPutList = ["youAre", "MeeToooo"] 
+0

この関数の入力と出力がどのように表示されるか、もう少し明確になりますか? –

+0

あなたの問題は何ですか? – gommb

+0

n個の部分文字列を除外する必要がある場合はどうすればよいですか?明らかに、私はコード内でそれらをすべてハードコードしないので、私はファイルを除外して各部分文字列を読むことができ、最終値には同じものが含まれていないと主張する代わりの方法が必要です。 –

答えて

1

ワンライナー(最適なものを必要はありません)しかし実行します。

[x for x in stringsList if not [e for e in excluded if e in x]] 

または

from itertools import dropwhile 
[x for x in stringsList if not list(dropwhile(lambda t: t not in x, excluded))] 
+0

私が言及したように、PRDをインストールしたpython 2.4.xを使用するように制限されています。「any」は動作しません。 –

+0

@RahulTrivedi単に 'any'を削除してください。ここでは必要ありません。 –

+0

1つのライナーに感謝します。魅力のように動作します。 :) –

1

def filterJunk(x, excluded): 
    def not_excluded(s): 
     for ex in excluded: 
      if ex in s: 
       return False 
     return True 

    return filter(not_excluded, x) 

stringsList = ["Icantbeapart_of_yourlist_asI_am_in_Junk", "youAre", "MeeToooo", "#junk"] 
excluded = 'I', 'am', '#junk' 

print filterJunk(stringsList, excluded) # -> ['youAre', 'MeeToooo'] 

分析

私の答えは、1行のコードよりもかなりあるので、あなたは合理的にそのような@AGN Gazer's answerで2などの「ワンライナー」より遅いことを期待したいです。それが正しいかどうかは、使用しているPythonのバージョンによって異なります。これはベンチマークではさまざまなアルゴリズムをマークしていますが、これは実行タイミングテストコードI threw-togetherを使用したものです)。

Pythonの2.7.14のために

結果は以下の通りであった。

Fastest to slowest execution speeds using Python 2.7.14 
(10,000 executions, best of 3 repetitions) 

AGN Gazer 1 : 0.009705 secs, rel speed 1.00x, 0.00% slower 
    martineau : 0.012495 secs, rel speed 1.29x, 28.74% slower 
AGN Gazer 2 : 0.045498 secs, rel speed 4.69x, 368.79% slower 

しかし、彼らは、Python 3.6.3のためにかなり異なっている:

Fastest to slowest execution speeds using Python 3.6.3 
(10,000 executions, best of 3 repetitions) 

    martineau : 0.003329 secs, rel speed 1.00x, 0.00% slower 
AGN Gazer 1 : 0.017841 secs, rel speed 5.36x, 435.99% slower 
AGN Gazer 2 : 0.034160 secs, rel speed 10.26x, 926.29% slower 
+1

Pls 1)正解とb)私のテストでは私の1つのライナーより効率的です。 –

+0

@AGN Gazer:これはあなたのスポーツマン様です。ありがとうございます。しかし、それほど単純ではありません。私の答えに追加した**分析**セクションを参照してください。 OPの質問にはpython-2.xというタグは付いていませんが、古代のPython 2.4を使っていると言われています。 – martineau

+0

私は実際には2.4で何もテストすることができません(私はそれを持っていないし、それをインストールする気にしたくありません)とあなたの答えは完璧です。とにかく私のupvoteを取り戻すことはできません:) –

関連する問題