While循环中的While循环python

While循环中的While循环python,python,string,loops,while-loop,Python,String,Loops,While Loop,我试图在一个while循环中编写一个while循环,但由于某些原因,它并没有正常工作。我知道我可能错过了一些非常琐碎的东西,但我不明白它怎么会不起作用 循环的目的是比较两个字符串,看看它们是否包含任何3个相同的连续单词。我首先将这两个字符串拆分为各自的3个单词字符串组合列表,并将其存储在列表字符串和字符串比较中。然后我循环遍历字符串中的每个3字字符串比较字符串中的每个3字字符串 对于一些人来说,这似乎是一个相当长的过程,但我只是一个新手程序员,任何改进都将不胜感激 因此,目前,第二个while循

我试图在一个while循环中编写一个while循环,但由于某些原因,它并没有正常工作。我知道我可能错过了一些非常琐碎的东西,但我不明白它怎么会不起作用

循环的目的是比较两个字符串,看看它们是否包含任何3个相同的连续单词。我首先将这两个字符串拆分为各自的3个单词字符串组合列表,并将其存储在列表字符串和字符串比较中。然后我循环遍历字符串中的每个3字字符串比较字符串中的每个3字字符串

对于一些人来说,这似乎是一个相当长的过程,但我只是一个新手程序员,任何改进都将不胜感激

因此,目前,第二个while循环一直运行,而第一个while循环只对字符串中的第一个字符串循环一次。如果字符串匹配,我希望它从两个循环中断开,但是这些循环也在一个更大的for循环中,我不希望它断开

e、 g

'这是一个字符串' “这是另一个字符串”-不匹配 '这是一个列表a字符串'-匹配'这是一个' “列表是字符串”-应匹配“是字符串”,但当前不匹配

strings = <list of 3 word strings> [...,...,...]
stringscompare = <list of 3 word strings to compare>
v=0, x=0
while v < len(strings) and stop == False:
    while x < len(stringscompare) and stop == False:
        if re.search(strings[v], stringscompare[x]):
            same.append(dict)
            stop = True
        x += 1
    v +=1

使用两次相同的变量stop我认为在循环后应该将stop设置为false:

strings = <list of 3 word strings> [...,...,...]
stringscompare = <list of 3 word strings to compare>
v=0, x=0
while v < len(strings) and stop == False:
    while x < len(stringscompare) and stop == False:
        if re.search(strings[v], stringscompare[x]):
            same.append(dict)
            stop = True
        x += 1
    stop = False
    v +=1

使用两次相同的变量stop我认为在循环后应该将stop设置为false:

strings = <list of 3 word strings> [...,...,...]
stringscompare = <list of 3 word strings to compare>
v=0, x=0
while v < len(strings) and stop == False:
    while x < len(stringscompare) and stop == False:
        if re.search(strings[v], stringscompare[x]):
            same.append(dict)
            stop = True
        x += 1
    stop = False
    v +=1
您永远不会在外循环中重置x。因此,在外循环的第一次迭代之后,它将始终等于或大于lenstringscompare

在外部循环中将其设置为0:

v = 0
while v < len(strings) and stop == False:
    x = 0
    while x < len(stringscompare) and stop == False:
或将any与生成器表达式一起使用以查找第一个匹配项:

 if any(re.search(s, sc) for s in strings for sc in stringscompare):
     same.append(dict)
您永远不会在外循环中重置x。因此,在外循环的第一次迭代之后,它将始终等于或大于lenstringscompare

在外部循环中将其设置为0:

v = 0
while v < len(strings) and stop == False:
    x = 0
    while x < len(stringscompare) and stop == False:
或将any与生成器表达式一起使用以查找第一个匹配项:

 if any(re.search(s, sc) for s in strings for sc in stringscompare):
     same.append(dict)

我会建议这样的

strings = [] # <list of 3 word strings> [...,...,...]
stringscompare = [] # <list of 3 word strings to compare>

stop = False

for x in strings:
    if stop:
        break

    for v in stringscompare:
        if re.search(v, x):
            stop = True
            break

在这里,for循环似乎更合适。这就是你想要达到的目标吗?

我建议这样做

strings = [] # <list of 3 word strings> [...,...,...]
stringscompare = [] # <list of 3 word strings to compare>

stop = False

for x in strings:
    if stop:
        break

    for v in stringscompare:
        if re.search(v, x):
            stop = True
            break

在这里,for循环似乎更合适。这就是您试图实现的目标吗?

这里的代码最明显的问题是,一旦内部循环完成,您不会再次将X的值设置为0。我会解释: 假设“strings”和“stringscompare”的长度都是3。第一次进入大while循环时,v=0和x=0。 当我们进入第二个循环时,x=0。当我们离开第二个循环时,如果没有找到匹配项,x=lengthstringscompare=3

现在,当我们回到第一个while循环时,它实际上又回到了循环内部-但是它什么也不做,因为第二个循环的子句不能满足-X仍然是3

您可以通过在循环2的末尾重置X来解决此问题:

strings = <list of 3 word strings> [...,...,...]
stringscompare = <list of 3 word strings to compare>
v=0, x=0
while v < len(strings) and stop == False:
    while x < len(stringscompare) and stop == False:
        if re.search(strings[v], stringscompare[x]):
            same.append(dict)
            stop = True
        x += 1
    x = 0 #resetting X
    v +=1
通过调试,您可以轻松地跟踪此类问题。调试的方法有很多,这真的是一门艺术 我向您推荐:

如果您使用的是Eclipse、PyCharm等,那么您可以使用内置的调试器,这非常棒。您可以通过添加断点在程序的任何一点停止,查看所有变量的值,等等。 例如,在本例中,我将在第一个循环语句'whilev 印刷是你的朋友。类似这样简单的事情,例如:

您还可以打印变量的值

有很多其他的方法来做你正在尝试做的事情,三角形图,高级搜索方法,也许更复杂的数据结构,等等。但是现在-我认为对你来说最好的事情是以最直接的方式解决问题-专注于编写高质量的代码,命名良好的变量,缩进,注释等。极客,“顶级性能”尖端技巧将在稍后推出:


祝你好运,玩得开心

这里代码最明显的问题是,一旦内部循环完成,就不能将X的值再次设置为0。我会解释: 假设“strings”和“stringscompare”的长度都是3。第一次进入大while循环时,v=0和x=0。 当我们进入第二个循环时,x=0。当我们离开第二个循环时,如果没有找到匹配项,x=lengthstringscompare=3

现在,当我们回到第一个while循环时,它实际上又回到了循环内部-但是它什么也不做,因为第二个循环的子句不能满足-X仍然是3

您可以通过在循环2的末尾重置X来解决此问题:

strings = <list of 3 word strings> [...,...,...]
stringscompare = <list of 3 word strings to compare>
v=0, x=0
while v < len(strings) and stop == False:
    while x < len(stringscompare) and stop == False:
        if re.search(strings[v], stringscompare[x]):
            same.append(dict)
            stop = True
        x += 1
    x = 0 #resetting X
    v +=1
通过调试,您可以轻松地跟踪此类问题。调试的方法有很多,这真的是一门艺术 我向您推荐:

如果您使用的是Eclipse、PyCharm等,那么您可以使用内置的调试器,这非常棒。您可以通过以下方式在程序的任何位置停止 添加断点,查看所有变量的值等。 例如,在本例中,我将在第一个循环语句'whilev 印刷是你的朋友。类似这样简单的事情,例如:

您还可以打印变量的值

有很多其他的方法来做你正在尝试做的事情,三角形图,高级搜索方法,也许更复杂的数据结构,等等。但是现在-我认为对你来说最好的事情是以最直接的方式解决问题-专注于编写高质量的代码,命名良好的变量,缩进,注释等。极客,“顶级性能”尖端技巧将在稍后推出:


祝你好运,玩得开心

如果没有具体的字符串示例和stringscompare,很难判断这里出了什么问题,但我的猜测是,在内部循环中,stop设置为True,因此外部循环终止。你确定外部循环中的条件和stop==False是故意的吗?如果没有具体的字符串和strings示例,很难判断这里出了什么问题,但我的猜测是,在内部循环中,stop设置为True,因此外部循环终止。你确定外部循环中的条件和stop==False是故意的吗?太棒了!!非常感谢你们,我已经看了几个小时了,我知道这将是一件非常简单的事情!!!感谢您的观察,您的方式更加优雅@劳拉奎因:很高兴你发现不止一个答案是有用的!一定要考虑到你们只能给其中一个答案15分。如果你知道这一点,并且发现Matanoga的答案更有帮助,那么恭喜他-令人惊叹的非常感谢你们,我已经看了几个小时了,我知道这将是一件非常简单的事情!!!感谢您的观察,您的方式更加优雅@劳拉奎因:很高兴你发现不止一个答案是有用的!一定要考虑到你们只能给其中一个答案15分。如果你知道这一点,并且发现Matanoga的答案更有帮助,那么恭喜他-