Python:比较不冗余的列表项

标签 python for-loop optimization comparison graph-algorithm

假设我有一个嵌套在字典键中的列表。所以像这样:

d = {'people':['John', 'Carry', 'Joe', 'Greg', 'Carl', 'Gene']}

我想将列表中的人相互比较,以便我可以制作一个图表,连接以相同首字母开头的名称。

我想出了一个嵌套的 for 循环来尝试解决这个问题:

for subject in d.keys():
        for word1 in d[people]:
            for word2 in d[people]:
                if word1[0] == word2[0]:
                    g.connectThem(word1,word2)

但是嵌套的 for 循环可能会变得多余,因为它会进行两次相同的比较。有什么办法可以让比较时不出现冗余吗?

最佳答案

您可以使用itertools.combinations遍历对

for pair in itertools.combinations(d['people'], 2):
    first, second = pair
    if first[0] == second[0]:
        g.connectThem(first, second)

这些是由组合产生的对

[('John', 'Carry'), ('John', 'Joe'), ('John', 'Greg'), ('John', 'Carl'), ('John', 'Gene'),
 ('Carry', 'Joe'), ('Carry', 'Greg'), ('Carry', 'Carl'), ('Carry', 'Gene'),
 ('Joe', 'Greg'), ('Joe', 'Carl'), ('Joe', 'Gene'),
 ('Greg', 'Carl'), ('Greg', 'Gene'),
 ('Carl', 'Gene')]

请注意,您没有重复的问题(通过颠倒该对的顺序)。
假设您的 connectThem 函数有效,这应该会产生您想要的行为。

关于Python:比较不冗余的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28129515/

相关文章:

python - 使用 pg_upgrade 从 11.1 升级到 11.6 的 postgres 问题

python - 在 Python3 中对包含字典的列表进行排序

python - 如何只调用命令而不获取其输出

python - 用 Pandas 循环遍历数据帧的最有效方法是什么?

php - 数据库查询速度

c# - 优化具有大量实例的 .NET 应用程序的内存占用

c# - 如何加速 C# 数学代码

python - 通过添加元组的第二个和第三个元素对元组列表进行排序

java - 'for' 不在 boolean 方法中循环

javascript - 对于来自 Node.js 数组的每个请求