我想知道是否有更优雅的方法来检查字符串(str ='abcccbbaabcbca')是否只包含'a','b'或'c'而不是迭代它:
for i in str:
if i in ['a','b','c']:
pass
else :
print('wrong character')
答案 0 :(得分:7)
将两个字符串转换为集合并检查它们是否相等。如果是,则您的字符串包含a
和b
以及c
:
valid = set(your_string) == set('abc')...
使用issubset
检查它是否包含a,b,c:
valid = set(your_string) <= set('abc')
或
valid = set(your_string).issubset('abc')
减去集合以找出无效字符:
bad_chars = set('abcXYcba') - set('abc') # set(X,Y)
答案 1 :(得分:6)
您可以将any
与生成器表达式一起使用:
if any(c not in 'abc' for c in _str): # Don't use str as a name.
print('Wrong character')
答案 2 :(得分:2)
使用正则表达式:
import re
if re.search('[^abc]', string):
print('wrong character')
答案 3 :(得分:1)
随意模拟,因为它直接跳转到正则表达式,但测试匹配&#34; ^ [abc] + $&#34;
re.match('^[abc]+$', 'string')
答案 4 :(得分:1)
您还可以使用string.translate
:
import string
s = 'abcccbbaabcbca'
# translate character to empty ""
t = string.maketrans("","")
# if non-abc character is found s.translate will become the bad characters
if s.translate(t, 'abc'):
print ('wrong character')
同样从@PadraicCunningham指出
# for one off usage, you can skip making a translation table.
if s.translate(None, 'abc'):
…