我正在尝试打印"是"或"否" (为清晰起见,引号)取决于文本字符串中是否存在模式的任何排列。
from itertools import permutations
i = int(input())
for j in range(i):
m = input()
n = input()
lst = []
for k in permutations(m):
lst.append("".join(k))
for l in lst:
if l in n:
print("YES")
break
else:
print("NO")
break
print(lst)
这是示例输入:
3
hack
indiahacks
code
eddy
coder
iamredoc
这是预期的输出
YES
NO
YES
对于前两个输入,输出正确,第三个输出是失败的输出。
/home/ajay/.pyenv/versions/3.4.1/bin/python3.4 /home/ajay/PycharmProjects/LearnPython/test.py
1
coder
iamredoc
NO
['coder', 'codre', 'coedr', 'coerd', 'corde', 'cored', 'cdoer', 'cdore', 'cdeor', 'cdero', 'cdroe', 'cdreo', 'ceodr', 'ceord', 'cedor', 'cedro', 'cerod', 'cerdo', 'crode', 'croed', 'crdoe', 'crdeo', 'creod', 'credo', 'ocder', 'ocdre', 'ocedr', 'ocerd', 'ocrde', 'ocred', 'odcer', 'odcre', 'odecr', 'oderc', 'odrce', 'odrec', 'oecdr', 'oecrd', 'oedcr', 'oedrc', 'oercd', 'oerdc', 'orcde', 'orced', 'ordce', 'ordec', 'orecd', 'oredc', 'dcoer', 'dcore', 'dceor', 'dcero', 'dcroe', 'dcreo', 'docer', 'docre', 'doecr', 'doerc', 'dorce', 'dorec', 'decor', 'decro', 'deocr', 'deorc', 'derco', 'deroc', 'drcoe', 'drceo', 'droce', 'droec', 'dreco', 'dreoc', 'ecodr', 'ecord', 'ecdor', 'ecdro', 'ecrod', 'ecrdo', 'eocdr', 'eocrd', 'eodcr', 'eodrc', 'eorcd', 'eordc', 'edcor', 'edcro', 'edocr', 'edorc', 'edrco', 'edroc', 'ercod', 'ercdo', 'erocd', 'erodc', 'erdco', 'erdoc', 'rcode', 'rcoed', 'rcdoe', 'rcdeo', 'rceod', 'rcedo', 'rocde', 'roced', 'rodce', 'rodec', 'roecd', 'roedc', 'rdcoe', 'rdceo', 'rdoce', 'rdoec', 'rdeco', 'rdeoc', 'recod', 'recdo', 'reocd', 'reodc', 'redco', 'redoc']
Process finished with exit code 0
您可以看到排列列表中存在redoc
,但为什么python in
关键字无法识别它,从而产生NO
输出。
答案 0 :(得分:4)
在检查列表中的第一项后,您立即突破了列表中的循环。
而不是:
for l in lst:
if l in n:
print("YES")
break
else...
如果必须使用循环结构,则可以使用以下命令恢复代码:
for l in lst:
if l in n:
print("YES")
break
else: # this will run after (and only if) exhausting your loop.
print("NO")
Raymond Hettinger认为else
的这种用法应该被称为nobreak
,我认为这是对它的直觉。
这是usage of the else
clause on loops, and is documented here。