【问题标题】:itertools combinations in tandem with looping与循环一起使用的 itertools 组合
【发布时间】:2018-07-22 16:13:53
【问题描述】:

我有以下 Python 代码。因为使用的是随机数,所以每次都会生成一个新的答案:

import random

import numpy as np

N = 64 # Given

T = 5 # Given

FinalLengths = []

for i in range(T):

    c = range(1, N)
    x = random.sample(c, 2) # Choose 2 random numbers between 1 and N-1
    LrgstNode = max(x)
    SmlstNode = min(x)
    RopeLengths = [SmlstNode, LrgstNode - SmlstNode, N - LrgstNode] 
    S = max(RopeLengths)
    N = S
    FinalLengths.append(S)

avgS = np.mean(FinalLengths) # Find average

print("The mean of S is {}".format(avgS))

我的研究使我可能使用 itertools 组合来生成范围内的所有可能组合并让平均值收敛。如果有,怎么做?

谢谢。

【问题讨论】:

  • 您想要所有尺寸 2 的组合,还是任何可能尺寸的所有组合?

标签: python loops for-loop random itertools


【解决方案1】:

听起来就像你在追求这样的东西:

import random
import numpy as np
from itertools import combinations

N = 64 # Given
T = 5 # Given

FinalLengths = []

for i in range(T):
  c = list(range(1, N))
  for x in combinations(c, 2):
    S = max([min(x), max(x) - min(x), N - max(x)])
    N = S
    FinalLengths.append(S)

avgS = np.mean(FinalLengths) # Find average

print("The mean of S is {}".format(avgS))

要使用combinations(l, size),我们可以传入一个列表l和每个组合元组的大小,以及int size。仅此而已!

【讨论】:

  • 谢谢。为了澄清,问题表明存在一个长度为 N 且整数坐标为 (1,…,N−1) 的字符串。您随机选择 2 个唯一坐标而不进行替换,在这 2 个坐标处切割字符串,并将生成的 3 个片段中最长的一个作为新字符串。这完成了 T 次(只要可以在唯一的整数坐标处切割字符串)并调用最终结果字符串 S 的长度。当给定 T 和 N 时,我试图找到 S 的平均值。我仍在尝试围绕迭代与组合进行对比
  • 啊,那不一样。为什么要找到平均值?这只是学术兴趣吗?这听起来像是一个最大化或最小化问题,而不是一个平均有用的问题......
  • 你说得有道理! ...问题陈述的措辞很奇怪。也许我们应该在评估所有组合之后找到最终结果字符串的平均值?找到五次迭代的平均值没有意义,因为字符串越来越小......如果是这样,那将如何改变事情
  • 好吧,我真的要从澄清要解决的问题开始。这是针对课程还是其他“学术”(即不面向现实世界)问题,例如应用程序或算法挑战,还是帮助实现某些业务目标?无论哪种方式,我都会弄清楚问题,然后将算法写入问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 2016-08-15
  • 2012-08-25
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
相关资源
最近更新 更多