在以下代码中,我想按d
,e
,f
中的元素对列表a
,b
,c
进行排序。但是,结果d
,e
,f
具有重复值,这不应该发生,因为这只是一个排序。
我发现问题出现了(让我们称之为电子线。)
[ad[i], be[i], cf[i]] = [m, n, o]
在此行之前,即行的结果(让我们称之为c-line。)
m, n, o = sorted([ad[i], be[i], cf[i]], key=itemgetter(0))
是正确的,但当它进入电子线路时,问题就出现了。我在{E-line:
之前的i = 1
时捕获了屏幕截图
和电子线后面的截图:
请参阅?不仅ad[1]
和cf[1]
重复,而且m
和o
在步骤之后也是相同的。
你能告诉我这一步发生了什么吗?为什么分配会产生重复的值?
import numpy as np
from operator import itemgetter
a = [0.06546757, 0.98135887, 0.94941228]
b = [0.41770855, 0.7188204, 0.4161441]
c = [0.64173702, 0.71125552, 0.11180992]
d = [0.29584944, 0.23759218, 0.89771063]
e = [0.97220382, 0.06904977, 0.81744618]
f = [0.10343642, 0.05042443, 0.56769208]
# Group a and d, b and e, c and f
ad = np.transpose([a, d])
be = np.transpose([b, e])
cf = np.transpose([c, f])
for i in range(3):
m, n, o = sorted([ad[i], be[i], cf[i]], key=itemgetter(0)) # Sort by element in a, b, c
[ad[i], be[i], cf[i]] = [m, n, o]
答案 0 :(得分:0)
如果我指定m,n,o
的副本,则复制消失(我认为):
print(ad, be, cf)
for i in range(3):
m, n, o = sorted([ad[i], be[i], cf[i]], key=itemgetter(0)) # Sort by element in a, b, c
[ad[i], be[i], cf[i]] = [m.copy(), n.copy(), o.copy()]
print()
print(ad, be, cf)
# print(m,n,o)
产生
[[ 0.06546757 0.29584944]
[ 0.71125552 0.05042443]
[ 0.11180992 0.56769208]]
[[ 0.41770855 0.97220382]
[ 0.7188204 0.06904977]
[ 0.4161441 0.81744618]]
[[ 0.64173702 0.10343642]
[ 0.98135887 0.23759218]
[ 0.94941228 0.89771063]]
您的示例可能更简单,更易于阅读。例如,使用整数而不是浮点数。
我没有详细说明这一点,但重复表明一个或多个值正在被写入。 m,n,o
是2个元素列表。所以我猜测这将是放置copy
的好地方。