鱼C论坛

 找回密码
 立即注册
查看: 657|回复: 1

代码问题/deepcopy

[复制链接]
发表于 2019-2-26 10:29:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python新手,请路过的大神帮忙解答一下,多谢~
问题:什么原因使excess和short的内容错乱。(这里直接说short和excess可能比较懵,还是先看下代码。多谢多谢)
如下为代码片段:
简单解释一下:len(V)=10;R为一个有10个元素(均为数字)的列表;d为一个1行10列的矩阵;
代码实现:把R和d相同位置的数值差,为正的连同索引添加到excess字典中去;为负的连同索引添加到short字典中去。
  1. <pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:6.0pt;"><font size="3">short = {}
  2. excess = {}
  3. shortfall=[]
  4. <span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#000080;">len</span>(V)):
  5.     shortfall.append(R[i] - d[<span style="color:#0000ff;">0</span>,i])
  6. <span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#000080;">len</span>(V)):
  7.     <span style="color:#000080;font-weight:bold;">if </span>shortfall[i]> <span style="color:#0000ff;">0</span>:          <span style="color:#808080;font-style:italic;">#把shortfall里的正数连同索引添加到excess字典中去
  8. </span><span style="color:#808080;font-style:italic;">        </span>excess.setdefault(i, shortfall[i])
  9.     <span style="color:#000080;font-weight:bold;">else</span>:
  10.         <span style="color:#000080;font-weight:bold;">if </span>shortfall[i] < <span style="color:#0000ff;">0</span>:     <span style="color:#808080;font-style:italic;">#把shortfall里的负数连同索引添加到short字典中去
  11. </span><span style="color:#808080;font-style:italic;">            </span>short.setdefault(i, shortfall[i])</font></pre>
复制代码
但是运行的过程监控到excess、short与shortfall里的正负并不能一一对应。
监控到的如下:
shortfall=[13.0, -45.0, 10.0, -62.0, -63.0, -7.0, 159.0, 57.0, -78.0, 111.0]
excess={6: 11.0, 7: 22.0, 9: 62.0}
short={}

[i][i][i][i]修改代码:把excess和short 分别 deepcopy给short1和excess1,excess和short的表现同上。但是short1和excess1的表现正常,short1里的索引值和为负的数值铜shortfall里的完全对应,excess1也是。[/i][/i][/i][/i]
[i][i][i][i]代码如下:[/i][/i][/i][/i]
  1. <pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:6.0pt;"><font size="3">shortfall=[]
  2. short = {}  <span style="color:#808080;font-style:italic;"># 需求比订货量大,缺货的量
  3. </span>excess = {}  <span style="color:#808080;font-style:italic;"># 需求比订货量小,多余的量
  4. </span><span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#000080;">len</span>(V)):
  5.     shortfall.append(R[i] - d[<span style="color:#0000ff;">0</span>,i])
  6. <span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#000080;">len</span>(V)):
  7.     <span style="color:#000080;font-weight:bold;">if </span>shortfall[i]> <span style="color:#0000ff;">0</span>:
  8.         excess.setdefault(i, shortfall[i])
  9.     <span style="background-color: paleturquoise;">excess1=copy.deepcopy(excess)</span>
  10. <span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#000080;">len</span>(V)):
  11.     <span style="color:#000080;font-weight:bold;">if </span>shortfall[i] < <span style="color:#0000ff;">0</span>:
  12.         short.setdefault(i, shortfall[i])
  13.     <span style="background-color: paleturquoise;">short1=copy.deepcopy(short)</span></font></pre>
复制代码
这段代码单独拿出来运行也没有问题:

  1. <pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:6.0pt;"><font size="3"><span style="color:#000080;font-weight:bold;">from </span>numpy <span style="color:#000080;font-weight:bold;">import </span>*
  2. R=[<span style="color:#0000ff;">503</span>, <span style="color:#0000ff;">201</span>, <span style="color:#0000ff;">432</span>, <span style="color:#0000ff;">274</span>, <span style="color:#0000ff;">922</span>, <span style="color:#0000ff;">808</span>, <span style="color:#0000ff;">287</span>, <span style="color:#0000ff;">310</span>, <span style="color:#0000ff;">395</span>, <span style="color:#0000ff;">2361</span>]
  3. d=matrix([[<span style="color:#0000ff;">701.</span>, <span style="color:#0000ff;">609.</span>, <span style="color:#0000ff;">699.</span>, <span style="color:#0000ff;">675.</span>, <span style="color:#0000ff;">740.</span>, <span style="color:#0000ff;">726.</span>, <span style="color:#0000ff;">594.</span>, <span style="color:#0000ff;">805.</span>, <span style="color:#0000ff;">626.</span>, <span style="color:#0000ff;">534.</span>]])
  4. shortfall=[]
  5. short={}
  6. excess={}
  7. <span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#0000ff;">10</span>):
  8.     shortfall.append(R[i]-d[<span style="color:#0000ff;">0</span>,i])
  9. <span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#0000ff;">10</span>):
  10.     <span style="color:#000080;font-weight:bold;">if </span>shortfall[i]> <span style="color:#0000ff;">0</span>:
  11.         excess.setdefault(i, shortfall[i])
  12. <span style="color:#000080;font-weight:bold;">for </span>i <span style="color:#000080;font-weight:bold;">in </span><span style="color:#000080;">range</span>(<span style="color:#0000ff;">10</span>):
  13.     <span style="color:#000080;font-weight:bold;">if </span>shortfall[i] < <span style="color:#0000ff;">0</span>:
  14.         short.setdefault(i, shortfall[i])
  15. <span style="color:#000080;">print</span>(shortfall)
  16. <span style="color:#000080;">print</span>(short)
  17. <span style="color:#000080;">print</span>(excess)</font></pre>
复制代码
结果为:(分别是shortfall、short、excess)

                               
登录/注册后可看大图

问题:什么原因使excess和short的内容错乱。

[i][i][/i][/i]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-26 10:39:56 | 显示全部楼层
这个代码不知道为什么发出来就乱了,我又重新发了一次,麻烦看另外一个吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-14 04:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表