2

文字列に事前定義されたシンボルのリストのみが含まれているかどうかを確認し、次のようなことを行う必要があります。

my_string = 'qwer123asd!@#$%^'
tmp = str.maketrans({'0': None, 'x': None, '#': None, '$': None, 'q': None, 'i': None})
if my_string.translate(tmp) == '':
    print("Only predefined symbols!")

これを達成するためのより良い方法はありますか?

4

2 に答える 2

4
my_string = 'qwer123asd!@#$%^'
predef = set('0x#$qi')

if set(my_string).issubset(predef):
    print "only predefined symbols"
于 2012-04-25T08:03:40.070 に答える
2

正規表現は問題を探す解決策としてよく使われると思うので、私はしばしば正規表現の代替案を提唱していますが、この場合はそれが適切かもしれないと思います。

import re
pat = re.compile("^[0x#$qi]*$")
my_string = 'qwer123asd!@#$%^'
if pat.match(my_string):
    print("Only predefined symbols!")

if"]"が事前定義されたシンボルの 1 つであることを確認してください。それが角括弧内の最初のシンボルであることを確認してください。

質問で使用した文字列を使用すると、euromino の set メソッドと簡単に比較すると、これが 3 倍高速であることがわかります。patとの作成はpredefタイミングから除外されたので、これは「繰り返し使用」シナリオです。それらを含めると、違いは少なくなりますが、正規表現は依然として高速です。

于 2012-04-25T08:00:18.993 に答える