【发布时间】:2014-08-31 20:56:27
【问题描述】:
string1="abc"
string2="abdabcdfg"
我想查找 string1 是否是 string2 的子字符串。但是,有一些通配符,如"." 可以是任何字母,y 可以是"a" 或"d",x 可以是"b" 或"c"。
因此,".yx" 将是 string2 的子字符串。
如何仅使用一个循环对其进行编码?我想遍历 string2 并在每个索引处进行比较。我试过字典,但我想使用循环 我的代码:
def wildcard(string,substring):
sum=""
table={'A': '.', 'C': '.', 'G': '.', 'T': '.','A': 'x', 'T': 'x', 'C': 'y', 'G': 'y'}
for c in strand:
if (c in table) and table[c] not in sum:
sum+=table[c]
elif c not in table:
sum+=c
if sum==substring:
return True
else:
return False
print wildcard("TTAGTTA","xyT.")#should be true
【问题讨论】:
-
你应该使用字典和循环。在字典中,存储每个符号可以匹配的字符,并在循环中使用它来检查每个字符。
-
或者,将您的模式转换为正则表达式,例如
.+#->[a-z][bc][ad],然后匹配该正则表达式。我认为这要好得多,但它不使用循环。 -
能否请您发布您已经编写的代码并描述它有什么问题?
-
您不能将同一键的多个实例添加到字典中。如果您执行
{'A': '.', ..., 'A': 'x'},则A仅映射到x或.,而不是两者。您可以改用'A': '.x'或'A': ['x','.'];请参阅下面的答案(尽管我以相反的方式进行映射)。
标签: python string loops python-2.7 wildcard