gpt4 book ai didi

python - 在 python 中构建不同的对

转载 作者:行者123 更新时间:2023-11-28 22:20:17 25 4
gpt4 key购买 nike

productcode = ['apple','orange','melons'] # 1000+ more
pairs = []
count = 0
for xi,x in enumerate(productcode):
del productcode[xi]
for yi,y in enumerate(productcode):
pc2 += 1
p = (x,y)
pairs.append(p)

print ("Number of distinct pairs:",pc2)

productcode 包含一千多个数据项:

apple

orange

grape

预期输出:

apple orange

apple grape

orange grape

嵌套的 for 循环仅迭代列表中的一半项目 (productcode),因此我最终得到的对数比我预期的要少得多。谁能帮助解释我做错了什么,或者实际发生了什么?

最佳答案

itertools.combinations是对此的自然选择。为避免重复,只需先将您的 list 转换为 set。有 2 种类似的解决方案,具体取决于您是否需要有序的结果。

有序

from itertools import combinations

productcode = ['apple', 'orange', 'grape']

res_lst = sorted(map(sorted, combinations(set(productcode), 2)))

# [['apple', 'grape'], ['apple', 'orange'], ['grape', 'orange']]

我不确定您需要什么顺序,所以我在跨越 子列表进行了排序,每种情况都按字母顺序排列。

无序

如果顺序在任何地方都不重要,那么您需要使用 setfrozenset 项目:

res_set = set(map(frozenset, combinations(set(productcode), 2)))

# {frozenset({'apple', 'orange'}),
# frozenset({'grape', 'orange'}),
# frozenset({'apple', 'grape'})}

这是因为set项必须是不可变的; frozensetset 的不可变版本。这是测试一对是否在集合中的一种自然方法。例如:

{'orange', 'apple'} in res_set  # True

另一种方法是使用一组按字母顺序排序的元组。

关于python - 在 python 中构建不同的对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49083432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com