在python中使嵌套for循环高效

在python中使嵌套for循环高效,python,Python,我怎样才能使这个程序更有效率 tempPossiblePairs = defaultdict(lambda: set([])) for w1 in words: for w2 in words: if(w1 != w2): tempPossiblePairs[w1].add(w2) for w1 in words: for w2 in words: if(

我怎样才能使这个程序更有效率

    tempPossiblePairs = defaultdict(lambda: set([]))

    for w1 in words:
        for w2 in words:
            if(w1 != w2):
                tempPossiblePairs[w1].add(w2)

    for w1 in words:
        for w2 in words:

            if(w1 != w2 and (w2 in tempPossiblePairs[w1])):
                res.append((self.getPMI(w1, w2), self.pair(w1, w2)[0], self.pair(w1, w2)[1]))
我编写了一个程序,在给定“单词”列表的情况下生成一个字典,该字典将单词作为关键字,并将可以与关键字配对的单词作为值。然后我再次查看单词列表,看看它们是否不相等,并且可以通过检查tempossiblePairs dict来配对


我知道这段代码杂乱无章,效率低下,但我想听听一些技巧来提高效率。

我想你可以把它归结为

from itertools import product

res = [(self.getPMI(w1, w2), *self.pair(w1, w2)) for w1, w2 in product(words, repeat=2) if w1 != w2]

*self.pair位将pair的结果解包到元组中这是假设pair只返回两个元素,我认为这需要你有一个相对较新的Python 3版本

我不认为有必要使用tempossiblePairs如何有效地检查w2是否是键w1的值?我的答案已经回答了一半,才意识到它与你的完全相同。这是一个标准的Python包?@Dawn17是的。如果你不想要反射,你可以阅读更多关于@Dawn17的内容,也就是说,A,B和B,A都可能更快