random.sample() 每次都返回相同的随机序列?

2023-11-24

我使用 python 的 random.sample(population, k) 函数从列表中生成一组随机值,​​以创建该列表的新排列。问题是每次它运行一个循环时,它都会生成完全一样随机序列。为什么是这样?我什至使用 random.seed(i) ,以便 i 变量(每次通过循环更改)都会每次为其播种不同的值。还是同样的顺序。是什么赋予了!@

这是我的使用方法:

def initialBuild(self):
    alphabet = self.alphabet
    for i in range (self.length):
        value = random.sample(alphabet, 1)
        alphabet.remove(value[0])
        self.finalWord.append(value[0])
    print "Final word = ", self.finalWord

这只是从 individual 类的 init 方法中调用的。 init 方法被这样调用......

def buildPopulation(self, alphabet):
    #Initialize empty individuals
    for i in range(POPULATION_SIZE):
        self.population.append(Individual(alphabet))

init 方法看起来像这样......

def __init__(self, alphabet = []):
    self.length = len(alphabet)
    self.alphabet = alphabet
    self.initialBuild()

最后,我要打印最后一句话。以下是运行此方法两次的输出:

最终的话 = [[1150, 1160], [720, 635]、[95、260]、[595、360]、[770、 610]、[830、610]、[25、185]、[520、 585]、[605、625]、[410、250]、[555、 815]、[880、660]、[300、465]、[1220、 580]、[1215、245]、[1250、400]、[565、 575]、[1605、620]、[845、680]、[1170、 65]、[795、645]、[525、1000]、[760、 650]、[580、1175]、[420、555]、[25、 230]、[345、750]、[700、500]、[725、 370]、[1530、5]、[1740、245]、[875、 920]、[415、635]、[1340、725]、[975、 580]、[575、665]、[1465、200]、[830、 485]、[660、180]、[475、960]、[685、 595]、[145、665]、[510、875]、[845、 655]、[650、1130]、[945、685]、[480、 415]、[700、580]、[560、365]、[685、 610]、[835、625]、[1320、315]]

最终的话 = [[1150, 1160], [720, 635]、[95、260]、[595、360]、[770、 610]、[830、610]、[25、185]、[520、 585]、[605、625]、[410、250]、[555、 815]、[880、660]、[300、465]、[1220、 580]、[1215、245]、[1250、400]、[565、 575]、[1605、620]、[845、680]、[1170、 65]、[795、645]、[525、1000]、[760、 650]、[580、1175]、[420、555]、[25、 230]、[345、750]、[700、500]、[725、 370]、[1530、5]、[1740、245]、[875、 920]、[415、635]、[1340、725]、[975、 580]、[575、665]、[1465、200]、[830、 485]、[660、180]、[475、960]、[685、 595]、[145、665]、[510、875]、[845、 655]、[650、1130]、[945、685]、[480、 415]、[700、580]、[560、365]、[685、 610]、[835、625]、[1320、315]]

请注意,这两个完全相同..

Edit:由于我很难挑选出我认为有用但又足够短的代码来进入这篇文章,所以我在 Pastebin 上发布了一堆代码。http://pastebin.com/f5f068391希望这是一个更好的选择..再次感谢


我不确定你所说的“生成完全一样随机序列”。由于您只给我们一个无法单独运行的代码片段,因此您的代码的其他部分很可能存在您选择不向我们展示的错误 - 我尝试添加绝对运行您的代码片段所需的最少量的代码,即:

import random

import string
def self(): pass
self.alphabet = list(string.lowercase)
self.finalWord = []
self.length = 4

for x in range(5):
  alphabet = self.alphabet
  for i in range (self.length):
      value = random.sample(alphabet, 1)
      alphabet.remove(value[0])
      self.finalWord.append(value[0])
  print "Final word = ", self.finalWord

这是我运行这个自给自足的脚本几次时看到的内容:

$ python sa.py 
Final word =  ['y', 'm', 'u', 'z']
Final word =  ['y', 'm', 'u', 'z', 'h', 'b', 'c', 's']
Final word =  ['y', 'm', 'u', 'z', 'h', 'b', 'c', 's', 'x', 'l', 'r', 'n']
Final word =  ['y', 'm', 'u', 'z', 'h', 'b', 'c', 's', 'x', 'l', 'r', 'n', 'q', 'a', 'k', 'e']
Final word =  ['y', 'm', 'u', 'z', 'h', 'b', 'c', 's', 'x', 'l', 'r', 'n', 'q', 'a', 'k', 'e', 'p', 'd', 'j', 'w']
$ python sa.py 
Final word =  ['k', 'v', 'o', 'd']
Final word =  ['k', 'v', 'o', 'd', 'q', 'p', 'w', 'l']
Final word =  ['k', 'v', 'o', 'd', 'q', 'p', 'w', 'l', 'n', 'u', 'g', 't']
Final word =  ['k', 'v', 'o', 'd', 'q', 'p', 'w', 'l', 'n', 'u', 'g', 't', 'i', 'r', 'e', 'f']
Final word =  ['k', 'v', 'o', 'd', 'q', 'p', 'w', 'l', 'n', 'u', 'g', 't', 'i', 'r', 'e', 'f', 's', 'c', 'j', 'z']
$ python sa.py 
Final word =  ['o', 'a', 'g', 't']
Final word =  ['o', 'a', 'g', 't', 'k', 'j', 'y', 'w']
Final word =  ['o', 'a', 'g', 't', 'k', 'j', 'y', 'w', 'z', 'l', 'i', 's']
Final word =  ['o', 'a', 'g', 't', 'k', 'j', 'y', 'w', 'z', 'l', 'i', 's', 'u', 'p', 'f', 'm']
Final word =  ['o', 'a', 'g', 't', 'k', 'j', 'y', 'w', 'z', 'l', 'i', 's', 'u', 'p', 'f', 'm', 'h', 'e', 'q', 'v']

如你所见,这是什么but“完全相同的随机序列”——它每次运行都会改变,正如预期的那样。

我想当我试图使你的代码可执行时,我错误地读懂了你的想法,并且你的意思是它的使用方式与我的小脚本使用它的方式非常不同——但是读心术是一种不可靠的艺术(这就是为什么它会如果你发布一个独立的,那就更好了,runnable例如,尽可能小,同时仍然重现您的问题,而不是强迫我们尝试读懂您的想法!-)。

您为什么不按所需的最小数量调整我刚刚发布的独立脚本,使其更接近您的预期用途,并重现您观察到的问题?Then对我们来说,发现您的代码可能存在的任何问题并提出解决问题的最佳方法将变得更加容易和高效!

Edit:粘贴在pastebin中的OP代码有两个与以下完全无关的错误random并结合起来产生OP观察到的行为。这是代码的相关部分,已编辑:

class Phenotype:
   ...
   chromosome = []

   def __init__(self, alleles = []):
    self.length = len(alleles)
    self.alleles = alleles
    self.initialBuild()

   def initialBuild(self):
    alleleSet = self.alleles
    for i in range (self.length):
        value = random.sample(alleleSet, 1)
        alleleSet.remove(value[0])
        self.chromosome.append(value[0])

好吧,这里还有另一个错误(在新代码中使用旧的遗留类,而不是应该始终使用的闪亮的新样式类),但这还不是困扰OP的原因,所以我们只是顺便提一下; -)。

Bug 1:因为两者都没有__init__也没有任何其他方法进行分配self.chromosome = ...,所有提到的self.chromosome在代码中实际上引用了唯一的列表Phenotype.chromosome其中所有实例Phenotype班级份额。所以不可避免地all此类情况将always有完全相同的,相同的chromosome,无论如何。修复:添加self.chromosome = [] in __init__(最好也删除类级变量,因为它们没有任何好处,只会混淆问题)。

Bug 2:再次查看以下代码行来发现它:

    self.alleles = alleles
       ...
    alleleSet = self.alleles
       ...
        alleleSet.remove(value[0])

知道了?self.alleles和当地的名字alleleSet都是参考exactly一且相同alleles传入的集合(实际上是列表)——所以remove call i altering因此,在实例化第一个表型后,该集合将留空(这就是为什么尽管存在 Bug 1,染色体却不会继续增长:因为等位基因集合永远留空)。

修复:复制一份,例如alleleSet = list(self.alleles),避免损坏原藏品。

更好的解决办法:你正在做的是极其拼写更简单的代码的复杂方式,例如:

self.chromosome = list(self.alleles)
random.shuffle(self.chromosome)

即,只需获得随机排列。通过执行 N 个单独的样本并在生成时从集合中删除每个样本来构建随机排列,这是解决极其简单问题的一种非常迂回、缓慢且复杂的方法!-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

random.sample() 每次都返回相同的随机序列? 的相关文章

  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • Python 2.7 将比特币私钥转换为 WIF 私钥

    作为一名编码新手 我刚刚完成了教程 教程是这样的 https www youtube com watch v tX XokHf nI https www youtube com watch v tX XokHf nI 我想用 1 个易于阅读
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • 当我在 Pandas 中使用 df.corr 时,我的一些列丢失了

    这是我的代码 import numpy as np import pandas as pd import seaborn as sns import matplotlib pyplot as plt data pd read csv dea
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 如何使用 sys.path.append 在 Python 中导入文件?

    我的桌面上有两个目录 DIR1 and DIR2其中包含以下文件 DIR1 file1 py DIR2 file2 py myfile txt 这些文件包含以下内容 file1 py import sys sys path append s
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 通过表达式在变量中设置 SSIS 包中昨天的日期

    我正在设置一个变量SSIS包 我正在使用这个表达式 DATEPART yyyy GETDATE 10000 DATEPART month GETDATE 100 DATEPART day GETDATE 该表达式将为我提供一个变量值 例如
  • 如何将 String 转换为 BeautifulSoup 对象?

    我正在尝试抓取新闻网站 并且需要更改一个参数 我将其更改为替换为下一个代码 while i lt len links conn urllib urlopen links i html conn read soup BeautifulSoup
  • read.csv 警告“带引号的字符串内的 EOF”阻止完整读取文件

    I have CSV 文件 24 1 MB 我无法完全读懂我的 R 会话 当我在电子表格程序中打开该文件时 我可以看到 112 544 行 当我将其读入 R 时read csv我只收到 56 952 行和此警告 cit lt read cs
  • 如何在 OpenCV 中读取 Adob​​e RGB 色彩空间的 jpeg 图像?

    我正在尝试在 OpenCV 中使用 Adob e RGB 色彩空间读取和写入 jpeg OpenCV 假定 jpeg 具有 sRGB 色彩空间 并且在显示或写入文件时 图像会丢失一些颜色强度 我发现这种强度损失是由于我的答案的色彩空间差异造
  • 如何在 auto_increment 列中找到“漏洞”?

    例如 当我删除 id 3 时 我有以下内容 id name 1 2 4 5 现在 我想搜索丢失的 id 因为我想再次填充 id INSERT INTO xx id VALUES 3 有没有办法在 auto increment 索引中搜索 漏
  • 在 Visual Studio 2015 中调试本机 Android 库时断点不起作用

    在全新安装的 Visual Studio 2015 上 我创建了一个 Android 应用程序和 Android 本机库 本机库中的函数通过 DllImport 指令在应用程序代码中引用 当我为主应用程序选择 Xamarin 调试器 并开始
  • 如何让我的通用比较器 (IComparer) 处理空值?

    我正在尝试编写一个用于排序的通用对象比较器 但我注意到它不能处理它所比较的 值之一为空的实例 当一个对象为空时 我希望它像空字符串一样对待它 我尝试将 null 值设置为 String Empty 但在调用 CompareTo 时出现 对象
  • 如何调试已签名发布的 APK?

    我有一个已发布的 APK 已签名 上传到 Google Play 并安装在我的 Android 设备上 我想在我的 Android 设备上运行此 APK 时对其进行调试 通过 Android Studio 或 Eclipse 我以前做过这个
  • 为什么当我将鼠标悬停在 VS Code 上时,它会出现类似芯片/扭曲的显示?

    这是我尝试使用 VS Code 时得到的视图 我已经重新安装并重新启动了系统 但没有任何进展 每当我打开 VS Code 并想要启动一个项目时 当我悬停鼠标时 情况会变得越来越糟 我最初以为我的一般显示有问题 它不会影响其他应用程序 只是
  • 我应该在构造函数中使用 getter 和 setter 吗? [复制]

    这个问题在这里已经有答案了 初始化类时 在构造函数中使用 getter 和 setter 函数是一个好习惯吗 或者直接设置变量是一个好习惯 因为构造函数可以被认为是一种变异器 您不应该从构造函数中调用 getter 和 setter 构造函
  • 带有宏的类型安全通用容器

    我正在尝试使用宏在 C 中创建类型安全的通用链表 它的工作方式应该与 C 中模板的工作方式类似 例如 LIST int list LIST CREATE int 我的第一次尝试是为了 define LIST TYPE 我上面使用的宏 定义一
  • 从“react”导入 React 会导致未捕获的语法错误:意外的标识符

    我已经安装了 webpack 3 以及 babel 和我的条目index js bundle js将构建并运行 我已经使用 ES7 8 功能对其进行了测试 但是导入不起作用并导致Uncaught SyntaxError Unexpected
  • “= =”是什么意思? [复制]

    这个问题在这里已经有答案了 我注意到有人使用 PHP 运算符 我无法理解 我用一个函数尝试过 它以疯狂的方式对应 这个运算符的定义是什么 我什至在 PHP 运算符的声明中找不到它 a b Identical TRUE if a等于 b 并且
  • Android:无法销毁活动

    我使用以下代码来删除每个视图组上的子项 protected void onDestroy super onDestroy this liberarMemoria public void liberarMemoria imagenes rec
  • 如何获取应用程序的Windows任务栏按钮以显示进度条的进度

    Windows 7 或者是 Vista 中引入的功能之一是应用程序的任务栏按钮能够显示该应用程序中进度条的进度 当我创建表单并在其上放置进度条时 它不会显示在任务栏按钮中 因此我认为这不会自动完成 如何让 Windows 7 在应用程序的任
  • CUDA 零复制内存注意事项

    我试图弄清楚使用 cudaHostAlloc 或 cudaMallocHost 是否合适 我正在尝试运行一个内核 其中我的输入数据超过 GPU 上的可用数据量 我的 cudaMallocHost 空间可以大于 GPU 上的空间吗 如果没有
  • 获取数组中具有某些属性的项目数

    我有一系列对象 如下所示 scope students isSelected true isSelected true isSelected false isSelected true isSelected true 我怎样才能得到有的计数
  • JavaScript 中的圆碰撞

    对于学校 我需要用 JavaScript 编写一个程序来判断圆圈是否发生碰撞 它不需要以图形方式显示 我尝试了一下 但我的代码似乎不起作用 我该如何修复它 这是我生成的代码 function collision p1x p1y r1 p2x
  • 根据第一个下拉选择jquery显示第二个下拉选项

    我试图根据第一个下拉列表选择获得第二个下拉列表 我在这里找到了一个很棒的脚本 http jsfiddle net heera Gyaue enter code here 从这篇文章 Jquery 根据第一个下拉列表显示 排序第二个下拉列表
  • random.sample() 每次都返回相同的随机序列?

    我使用 python 的 random sample population k 函数从列表中生成一组随机值 以创建该列表的新排列 问题是每次它运行一个循环时 它都会生成完全一样随机序列 为什么是这样 我什至使用 random seed i