170 похожих чатов

Всем привет. Есть такой код: import unittest from typing import Iterator class Test(unittest.TestCase):

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()
все работает и в тест-классе.
В чем может быть прикол?

1 ответов

7 просмотров

Ну а как ты думаешь, что происходит когда ты модифицируешь список после того как кто-то получил на него ссылку?

Похожие вопросы

Обсуждают сегодня

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
вот не понимаю, зачем вообще лезть в осдев, если даже базы не знаешь? хотя бы про загрузку, форматы файлов железо какое-никакое. Ну реально, даже зная работу железа, с условны...
Mixail Frolov
7
Можно ли ставить FPC транк, а Лазарь нет?
А Андрей
9
Shadow Akira ты откуда инфу черпаешь?
One
9
Карта сайта