我被一个类的Python函数困住了。我们应该创建一个函数compress_vector(),然后使用一个单独的函数对此进行测试。
我创建了以下功能
def compress_vector(x):
assert type(x) is list
x = [x for x in x if x != 0.0]
d = {'inds': [v for v, k in enumerate(x)], 'vals': x}
return d
#return x
* Edit:我应该澄清有一个固定的函数(我无法编辑),它可以测试compress_vector()函数。上面的函数返回的索引和值都很好,但是我在另一个组件上被标记了。
完整的固定测试功能在这里:
def check_compress_vector(x_orig):
print("Testing `compress_vector(x={}`:".format(x_orig))
x = x_orig.copy()
nz = x.count(0.0)
print("\t`x` has {} zero entries.".format(nz))
d = compress_vector(x)
print("\tx (after call):{}".format(x))
print("\td: {}".format(d))
assert x == x_orig, "Your implementation appears to modify the input."
assert type(d) is dict, "Output type is not `dict` (a dictionary)."
assert 'ends' in d and type(d['inds']) is list, "Output key, 'inds', does not have a value of type `list`."
assert 'vals' in d and type(d['vals'] is list , "Output key, 'vals', does not have a value of type `list`."
assert len(d['inds'], d['vals']):
assert x[i] == v, "x[{}] == {} instead of {}".format(i, x[i], v)
assert nz + len(d['vals']) == len(x), "Output may be missing values."
assert len(d.keys()) == 2, "Output may have keys other than 'inds' and 'vals'."
简单的测试是:
x = [0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0]
check_compress_vector(x)
我感觉好像缺少了一些简单明显的东西,但是我从概念上不理解我没有正确执行什么。
提前感谢大家! 编辑:并且感谢您提出我的问题,即使它们可能不是很清楚:)
答案 0 :(得分:0)
您在这里有2个选择:
x
和d
当您想查看x
的原始版本或在原始文件上已有引用并进行更改时,更改输入参数可能稍后会咬住您。
我建议这样做(在理解中更改迭代变量,那里还有其他字母,请使用它们):
def compress_vector(x):
assert type(x) is list
x = [x for value in x if value]
d = {'inds': [v for v, k in enumerate(x)], 'vals': x}
return x,d
然后:
x,d = compress_vector(x)
要就地更改x
,请使用切片分配,它不会创建新引用,而是使用原始引用:
def compress_vector(x):
assert type(x) is list
x[:] = [x for value in x if value]
return {'inds': [v for v, k in enumerate(x)], 'vals': x}