gpt4 book ai didi

具有 in 关键字意外行为的 Python 控制流

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:03 24 4
gpt4 key购买 nike

我正在尝试根据文本字符串中是否存在模式的任何排列来打印“YES”或“NO”(为清楚起见而引号)。

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输出。

最佳答案

检查列表中的第一项后,您将立即跳出列表循环。

代替:

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 .

关于具有 in 关键字意外行为的 Python 控制流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25833791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com