【问题标题】:generating binary numbers of size n as tuples : itertools.product(*[(0, 1)] * n)将大小为 n 的二进制数生成为元组:itertools.product(*[(0, 1)] * n)
【发布时间】:2013-05-02 03:56:18
【问题描述】:
  • 我刚刚找到了这个说明

    itertools.product(*[(0, 1)] * n)
    

    由 PAG 发布。

    有人能解释一下它是如何工作的吗?

  • 我正在尝试找到一种在不重复 3 个袋子中的 n 个元组的情况下进行排列的方法 如果我愿意,我只能使用 itertools。谢谢

【问题讨论】:

  • zip(*[iter(seq)]*3) 例如将一个序列分成 3 个一组,这是一个合适的用例。 product 接受 repeat 参数,该参数使此代码无用。

标签: python permutation itertools


【解决方案1】:

[(0, 1)] 是由数字 01 组成的单个元组的列表。

[(0, 1)] * n 复制列表中的元组,所以我们得到

[(0, 1), (0, 1), ..., (0, 1), (0, 1)]

然后,如果我们查看itertools.product 函数,我们希望将每个元组作为单个参数传递。因此,我们使用*-操作符将我们的列表解压缩为itertools.product 函数的参数。所以,我们的函数相当于:

itertools.product((0, 1), (0, 1), ..., (0, 1), (0, 1))

计算n0s 和1s 的所有排列。

注意itertools.product 带有一个repeat 参数,应该使用它来做这种事情:

itertools.product((0, 1), repeat=n)

要做排列,你可以使用itertools.permutations函数:

def pick_into_three_bags(n):
    return itertools.permutations(range(n), 3)

【讨论】:

  • 请注意使这段代码无用的重复参数
  • 谢谢,但我不能重复排列。
  • @user1347096 如果您在我的回答中使用该功能,它不会重复。例如,pick_into_three_bags(3) 中的第一个元素将是 (0, 1, 2)
  • 对不起,这不是我想要的,我可能不清楚,昨天我无法测试你的解决方案。如果我有元素a,b,c。我想找到将这些物品放入 3 个袋子的所有可能性,所以我应该有 [(),(),(a,b,c)], [(a,b),(c),()], [(a),(b,c),()] 等等...() 描述一个包的内容
  • @user1347096 啊,我明白你的意思了。等等,让我看看有没有函数可以做这种事情。
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多