我创建了一个函数,它接受两个参数计算它们并返回一个列表,每个元素设置为参数n和输入列表中相应值的总和。这是我的函数代码:
def add_n_all(L,n):
listx = map(lambda x:x + n, L)
return listx
测试我的函数的代码如下所示:
def testmap_1(self):
L = [2, 3, 4]
n = 2
L2 = map.add_n_all(L,n)
self.assertListAlmostEqual(L2, [4, 2, 5, 3, 6, 4])
def testmap_1(self):
L = [2, 3, 4]
n = 2
L2 = map.add_n_all(L,n)
self.assertListAlmostEqual(L2, [3, 1, 6, 4, 8, 6])
然而,当我运行测试时,我不断收到此错误。我试图改变变量,但它似乎没有用,所以我不确定我做错了什么。
Traceback (most recent call last):
File "map_tests.py", line 33, in testmap_1
self.assertListAlmostEqual(L2, [3, 1, 6, 4, 8, 6])
File "map_tests.py", line 7, in assertListAlmostEqual
self.assertEqual(len(l1), len(l2))
AssertionError: 3 != 6
Ran 3 tests in 0.001s
FAILED (failures=1)
答案 0 :(得分:1)
您的函数不会增加长度,因此您将具有3个元素(L2
)的列表与包含6个元素的列表进行比较,这些元素显然不相等。
答案 1 :(得分:0)
当测试(或者换句话说然而,当我运行测试时,我不断收到此错误。
AssertionError
失败时)会引发Python中的
在assertListAlmostEqual
中检查输入和输出列表的长度。
self.assertEqual(len(l1), len(l2))
在您的测试用例中输入
L = [2, 3, 4]
的长度为3。
和map()
函数的输出列表的长度将与其输入的长度相同。因此,将输出L2
(3
)的长度与[3, 1, 6, 4, 8, 6]
的长度(6
)进行比较显然会使断言失败。
因此,在您的测试用例中,您需要纠正与L2
对比的内容。
更改
self.assertListAlmostEqual(L2, [3, 1, 6, 4, 8, 6])
到
self.assertListAlmostEqual(L2, [4, 5, 6])
通过测试(除非您打算测试否定案例,在这种情况下您需要使用assertNotEqual
)。
OR
如果您打算在每个元素上获得一个带有+n
的输出列表,并且还要从列表中获取相应的元素,那么您可以执行以下操作之一(不编写代码...这是你的HW rt ...... ):
def add_n_all(L,n):
# Consturct an empty list, which will be used to return as the output of this function
# for each element in the list
# do .extend() with [element+n, element] on the list initialized earlier for the purpose of this function return
# return the output list
OR
def add_n_all(L,n):
# good luck figuring out this list comprehension
return [item for sublist in [[x+n, x] for x in L] for item in sublist]