【问题标题】:Difference between random.sample(sample,k) and itertools.combinations(p,r)random.sample(sample,k) 和 itertools.combinations(p,r) 之间的区别
【发布时间】:2020-02-14 08:58:25
【问题描述】:

您好,我是 python 新手,刚刚开始编写基本的 python 脚本。我决定编写一个密码生成器程序。我遇到了random.sample()itertools.combinations() 函数。我想知道它们之间的区别。我已阅读文档并得出以下结论:
1. random.sample() 将返回总体中唯一组合的列表,前提是总体中没有重复值。
2. combinations() 还将返回一个 (p,r) 可能组合的元组,其中 r 是长度。 并且有这一行,“元素根据其位置被视为唯一,而不是它们的值。因此,如果输入元素是唯一的,则每个组合中都不会出现重复值。” 我不明白。我假设它说输入元素必须是唯一的才能获得唯一的组合

所以我得出的最终结论是两者都是一样的。我想知道我是对还是错(请解释)。谢谢你。

【问题讨论】:

  • “元素根据其位置而非值被视为唯一。因此,如果输入元素是唯一的,则每个组合中都不会出现重复值”。打印并检查list(combinations(lst, 2)) 输出的差异lst=[1,2,3,4]lst=[1,2,4,4]
  • 我试过这个...谢谢,明白意思。 lst 中有 2 个 4,即使这样它们也被视为不同的组合,因为两者的位置不同。

标签: python random combinations itertools


【解决方案1】:

它们不一样,实际上它们做的事情完全不同。 itertools.combinations() 是一个生成器 - 它从给定的一组值中返回一系列 all 组合。 random.sample() 提供一种(随机选择的)组合。运行这两个 sn-ps:

import random
print(random.sample([1,2,3], 2))

import itertools
for c in itertools.combinations([1,2,3],2):
    print(c)

并注意区别。

【讨论】:

  • 术语 nitpick:itertools.combinations 确实 not 返回一个生成器,它返回一个 itertools.combinations 对象,它是一个 iterator 但不是一个生成器.
  • 是的,我尝试了 sn-ps,我想我能够理解。那么 itertools.combinations() 是否更适合密码生成?当我在循环中运行 random() 脚本时。输出是重复的,而在文档中给出的是 random.sample() 从总体中返回一个唯一的元素列表。我想知道这其中的原因。输入代码:import random i =0 while i
  • 你混合了两件事:重复的组合和重复的元素。 random.sample() 保证返回的组合中的 elements 不会重复,因此在您的示例中,您将永远不会得到 (1,1)(2, 2);但是它不能保证后续调用不会返回相同的组合——这就是随机性!
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 2018-06-11
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多