def setUp(self):
self.solution = Solution()
def test_resolve(self):
result = list(self.solution.resolve(["a", "b", "c", 'd', 'e']))
self.assertEqual(result[0], ['b', 'a', 'c', 'd', 'e'])
self.assertEqual(result[1], ['b', 'c', 'a', 'd', 'e'])
self.assertEqual(result[2], ['b', 'c', 'd', 'a', 'e'])
self.assertEqual(result[3], ['b', 'c', 'd', 'e', 'a'])
self.assertEqual(result[4], ['c', 'b', 'd', 'e', 'a'])
class Solution:
@staticmethod
def resolve(sequence: list) -> Iterator:
"""
Perm(n) = n * (n - 1)
:param sequence: list to bo processed
:return: List of list of combinations
"""
length = len(sequence)
tmp = sequence.copy()
while True:
for i in range(0, length - 1):
tmp[i], tmp[i + 1] = tmp[i + 1], tmp[i]
yield tmp # problem here and why?
if tmp == sequence:
break
if __name__ == "__main__":
# not working
unittest.main()
# working
for entry in Solution.resolve(["a", "b", "c", 'd', 'e']):
print(entry)
При запуске тестов - они падают с ошибкой. При обычной итерации (строка 42) - все в норме. Проблема похоже в строке 32. Если заменить на
yield tmp.copy()
все работает и в тест-классе.
В чем может быть прикол?
Ну а как ты думаешь, что происходит когда ты модифицируешь список после того как кто-то получил на него ссылку?
Обсуждают сегодня