小编典典

如何断言两个列表在 Python 中包含相同的元素?

all

在编写测试用例时,我经常需要断言两个列表包含相同的元素,而不考虑它们的顺序。

我一直在通过将列表转换为集合来做到这一点。

有没有更简单的方法来做到这一点?

编辑

正如@MarkDickinson
指出的那样,我可以使用TestCase.assertItemsEqual

TestCase.assertItemsEqualPython2.7 中新增的注释。如果您使用的是旧版本的
Python,则可以使用unittest2 - Python 2.7
新功能的反向移植。


阅读 81

收藏
2022-06-22

共1个答案

小编典典

从 Python 3.2 unittest.TestCase.assertItemsEqual(
doc
) 开始, (doc ) 已被unittest.TestCase.assertCountEqual(
doc
) 取代,它完全符合您的要求,您可以从
python标准库文档中阅读。该方法的名称有些误导,但它完全符合您的要求。

a 和 b 具有相同编号的相同元素,无论它们的顺序如何

这是一个简单的例子,它比较了两个具有相同元素但顺序不同的列表。

  • 使用assertCountEqual测试会成功
  • assertListEqual由于两个列表的顺序不同,使用测试会失败

这里有一个小示例脚本。

import unittest


class TestListElements(unittest.TestCase):
    def setUp(self):
        self.expected = ['foo', 'bar', 'baz']
        self.result = ['baz', 'foo', 'bar']

    def test_count_eq(self):
        """Will succeed"""
        self.assertCountEqual(self.result, self.expected)

    def test_list_eq(self):
        """Will fail"""
        self.assertListEqual(self.result, self.expected)

if __name__ == "__main__":
    unittest.main()

旁注: 请确保您要比较的列表中的元素是可排序的。

2022-06-22