我正在编写2个数学组合运算的代码,我希望迭代(尽可能)多次,因此速度显然至关重要
这里是一个例子,我想做什么,尽快和有效地为任何正整数n和任何分级(见下面的例子)
备注:这是一个来自Sage数学实验的自我激励问题。 非常感谢你的帮助
示例: 让我们取n=6,集S={1,2,…,n}={1,2,3,4,5,6}。 有二项式(6,2)=15对
[(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)]
我们可以从S。 为了获得上述列表,建议我使用的内置工具如下:
from itertools import combinations
n = 6
iterable = list(range(1, n+1))
r = 2
print(list(combinations(iterable, r)))
问题0:Python有更快的版本吗
现在让我在集合S上选择一个从S到{1,2,3}的函数形式的分级
评分:1、2、3-->;1和4,5-->;2和6-->;三,
我已决定将此函数存储为字典,如下所示:
grading = {1: 1, 2: 1, 3: 1, 4: 2, 5: 2, 6: 3}
关于这个等级,我们可以计算由S构造的元素、偶或元组的等级
示例:
1-首次施工:
我要所有成绩等于g0=4的夫妇。 下面是一个显而易见的方法,它是在前面几行代码的基础上天真地构建的:
g0 = 4
gradedList = []
for couple in list(combinations(iterable, 2)):
grade = grading[couple[0]] + grading[couple[1]]
if grade == g0:
gradedList.append(couple)
print(gradedList)
这就产生了
[(1, 6), (2, 6), (3, 6), (4, 5)]
如所愿
问题1:是否有一种内置的方式来获取gradedList和/或用Python实现这一点的最快方式是什么
2-第二次施工:
现在我想提取所有递增的3元组(I,j,k),等级等于4,并且从I=1开始
换言之,我想要以下列表:
[(1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5)]
当然,这可以通过以下方式获得:
newIterable = list(range(2, n+1))
secondGradedList = []
for couple in list(combinations(newIterable, 2)):
grade = grading[1] + grading[couple[0]] + grading[couple[1]]
if grade == g0:
secondGradedList.append((1,) + couple)
print(secondGradedList)
问题2:是否有一种内置的方式来获取secondGradedList和/或用Python实现这一点的最快方式是什么
谢谢, 朱利安
目前没有回答
相关问题 更多 >
编程相关推荐