如何解决Python:While 循环超出了条件
我编写了下面的代码来生成一个包含 25 个列表的列表,其中每个列表有 40 个元素。但是,主要问题是所有列表的排序元素之间的相似度较低(我尝试从 difflib 应用 SequenceMatcher)。虽然条件是在内部列表数=25时停止循环,但我得到了32个内部列表。
这是我的代码:
import random
from difflib import SequenceMatcher
def string_converter(input_list):
string = ""
for m in input_list:
string += str(m)
return string
lists = []
strings = []
e = 0
while e <= 25:
list_one = []
n = 0
for i in range(40):
if 7 < n < 33:
i = random.randint(0,3)
list_one.append(i)
n += 1
else:
i = random.randint(0,2)
list_one.append(i)
n += 1
list_string = string_converter(list_one)
if e == 0:
strings.append(list_string)
lists.append(list_one)
e = 1
else:
for s in strings:
if SequenceMatcher(None,list_string,s).ratio() < 0.7:
strings.append(list_string)
lists.append(list_one)
e += 1
print(e)
print(lists)
print(len(lists))
print(strings)
解决方法
您的问题是这个循环,当您遍历 list_one
时,它可以将 lists
的多个副本附加到 strings
:
for s in strings:
if SequenceMatcher(None,list_string,s).ratio() < 0.7:
strings.append(list_string)
lists.append(list_one)
e += 1
您需要做的是检查 all SequenceMatcher
值是否为 <0.7
并且仅在它们是时追加。像这样:
if all(SequenceMatcher(None,s).ratio() < 0.7 for s in strings):
strings.append(list_string)
lists.append(list_one)
e += 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。