7

文字列にPythonで指定された特定の文字のみが含まれているかどうかを確認する最も簡単な方法は何ですか? (もちろん、正規表現などを使用せずに)

具体的には、文字列のリストがあり、別の文字列の文字のみで構成されている単語を除いて、それらすべてを除外したいと考えています。たとえば、フィルタリングする['aba', 'acba', 'caz']と. (入っていません)'abc'['aba', 'acba']zabc

与えられた文字で作れるアイテムだけを残すようなもの。

4

7 に答える 7

12

あなたの例の不一致がタイプミスであると仮定すると、これはうまくいくはずです:

my_list = ['aba', 'acba', 'caz']
result = [s for s in my_list if not s.strip('abc')]

になります['aba', 'acba']string.strip(characters)は、削除される文字列に入力に文字しか含まれていない場合、空の文字列を返します。文字の順序は重要ではありません。

于 2013-09-09T09:22:51.580 に答える
8

セットを利用できます:

>>> l = ['aba', 'acba', 'caz']
>>> s = set('abc')
>>> [item for item in l if not set(item).difference(s)]
['aba', 'acba']
于 2013-09-09T09:19:09.303 に答える
6

検索文字列内の文字のみを含むリスト内の文字列のみが必要であると仮定すると、簡単に実行できます

>>> hay = ['aba', 'acba', 'caz']
>>> needle = set('abc')
>>> [h for h in hay if not set(h) - needle]
['aba', 'acba']

セットを避けたくない場合は、 を使用して同じことを行うこともできますstr.translate。この場合、検索文字列に含まれるすべての文字を削除しています。

>>> needle = 'abc'
>>> [h for h in hay if not h.translate(None,needle)]
['aba', 'acba']
于 2013-09-09T09:19:37.867 に答える
4

このようなもの:

strings = ['aba', 'acba', 'caz']
given = "abc"
filter(lambda string: all(char in given for char in string), strings)
于 2013-09-09T09:19:57.473 に答える
1

ベース文字列の文字を再利用することについて、質問はややあいまいです。または、繰り返しがあるべきかどうか、または欠落した文字が許可されているかどうか。reuseこのソリューションは、パラメーターを含む関数でこれに対処します。

from collections import Counter

def anagram_filter(data, base, reuse=True):
    if reuse: # all characters in objects in data are in base, count ignored
        base = set(base)
        return [d for d in data if not set(d).difference(base)]
    r = []
    cb = Counter(base)
    for d in data:
        for k, v in Counter(d).iteritems():
            if (k not in cb.keys()) or (v > cb[k]):
                break
        else:
            r.append(d)
    return r

使用法:

>>> anagram_filter(['aba', 'acba', 'caz'], 'abc')
['aba', 'acba']
>>> anagram_filter(['aba', 'acba', 'caz'], 'abc', False)
[]
>>> anagram_filter(['aba', 'cba', 'caz'], 'abc', False)
['cba']
于 2013-09-09T09:37:19.803 に答える
0

以下はコードです:

a = ['aba', 'acba', 'caz']
needle = 'abc'

def onlyNeedle(word):
    for letter in word:
        if letter not in needle:
            return False

    return True

a = filter(onlyNeedle, a)

print a
于 2013-09-09T09:23:24.667 に答える