如何让 Python 中的 for 循环更高效
Posted
技术标签:
【中文标题】如何让 Python 中的 for 循环更高效【英文标题】:How to make the for loop more efficient in Python 【发布时间】:2018-04-20 14:22:01 【问题描述】:我有一个 Python 代码,可以生成给定句子中单词的所有可能排列。我希望将这些排列写在 .txt 文档中。 如果我尝试使用 9 字长的句子的代码,一切正常。这需要一段时间,但会创建包含所有可能排列的文件。但是当我用一个 10 字长的句子尝试代码时,它需要很长时间,因为可能的排列是 10!。有没有更有效的方法将句子的所有排列保存在 txt 文件中?我认为主要问题是我的 for 循环。
parser = optparse.OptionParser(usage=help_text)
parser.add_option("-f", "--file", dest="filename",
help="write the permutations to FILE", metavar="FILE")
(options, args) = parser.parse_args()
# read the input
sentence = input("Sentence: ")
sent_list = re.split(r"[\s.,!?:\"\';()]+", sentence)
# remove empty strings from the sent_list
sent_list = [s for s in sent_list if s is not ""]
result = ""
perm_iterator = itertools.permutations(list(sent_list),r=None)
for item in perm_iterator:
print("item in perm_iterator",item)
result += "".join(item);
# print to file if file option is not None
if options.filename is not None:
with open(options.filename, 'w') as f:
f.write(result)
print("The different variants of the sentence got saved in .".format(options.filename))
else:
print(result)
【问题讨论】:
为什么不保留perm_iterator作为生成器,在其上调用for循环,逐行写入.txt文件? 老实说,我并不真正了解生成器,但我会寻找并尝试它。谢谢! 【参考方案1】:答案是否。这种操作的时间复杂度总是 N! 的数量级,因为有很多可能的排列。渐近地减少这个在数学上是不可能的。
【讨论】:
以上是关于如何让 Python 中的 for 循环更高效的主要内容,如果未能解决你的问题,请参考以下文章