|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
python新手,请路过的大神帮忙解答一下,多谢~
问题:什么原因使excess和short的内容错乱。(这里直接说short和excess可能比较懵,还是先看下代码。多谢多谢)
如下为代码片段:
简单解释一下:len(V)=10;R为一个有10个元素(均为数字)的列表;d为一个1行10列的矩阵;
代码实现:把R和d相同位置的数值差,为正的连同索引添加到excess字典中去;为负的连同索引添加到short字典中去。
- <pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:6.0pt;"><font size="3">short = {}
- excess = {}
- shortfall=[]
- <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)):
- shortfall.append(R[i] - d[<span style="color:#0000ff;">0</span>,i])
- <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)):
- <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字典中去
- </span><span style="color:#808080;font-style:italic;"> </span>excess.setdefault(i, shortfall[i])
- <span style="color:#000080;font-weight:bold;">else</span>:
- <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字典中去
- </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]
- <pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:6.0pt;"><font size="3">shortfall=[]
- short = {} <span style="color:#808080;font-style:italic;"># 需求比订货量大,缺货的量
- </span>excess = {} <span style="color:#808080;font-style:italic;"># 需求比订货量小,多余的量
- </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)):
- shortfall.append(R[i] - d[<span style="color:#0000ff;">0</span>,i])
- <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)):
- <span style="color:#000080;font-weight:bold;">if </span>shortfall[i]> <span style="color:#0000ff;">0</span>:
- excess.setdefault(i, shortfall[i])
- <span style="background-color: paleturquoise;">excess1=copy.deepcopy(excess)</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)):
- <span style="color:#000080;font-weight:bold;">if </span>shortfall[i] < <span style="color:#0000ff;">0</span>:
- short.setdefault(i, shortfall[i])
- <span style="background-color: paleturquoise;">short1=copy.deepcopy(short)</span></font></pre>
复制代码 这段代码单独拿出来运行也没有问题:
- <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>*
- 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>]
- 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>]])
- shortfall=[]
- short={}
- excess={}
- <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>):
- shortfall.append(R[i]-d[<span style="color:#0000ff;">0</span>,i])
- <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>):
- <span style="color:#000080;font-weight:bold;">if </span>shortfall[i]> <span style="color:#0000ff;">0</span>:
- excess.setdefault(i, shortfall[i])
- <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>):
- <span style="color:#000080;font-weight:bold;">if </span>shortfall[i] < <span style="color:#0000ff;">0</span>:
- short.setdefault(i, shortfall[i])
- <span style="color:#000080;">print</span>(shortfall)
- <span style="color:#000080;">print</span>(short)
- <span style="color:#000080;">print</span>(excess)</font></pre>
复制代码 结果为:(分别是shortfall、short、excess)
问题:什么原因使excess和short的内容错乱。
[i][i][/i][/i] |
|