Во-первых, необязательно преобразовывать кортеж (tuple) в список (list), чтобы добавить его через метод extend, потому что extend просто сделает что-то типа:
def extend(self, new_values):
for value in new_values:
__values.append(value)
То есть extend пройдётся по переданному через for, а значит нужно понимать, что ему пойдёт любой итерируемый объект. По кортежу тоже можно через for пройти, ведь он тоже итерируемый, поэтому необязательно его преобразовывать в список для добавления.
Кстати, по факту, вызов list тебе сделает что-то типа следующего:
def list(iter_obj):
new_list = []
for obj in iter_obj:
new_list.append(obj)
return new_list
(для того, чтобы понимать, как это работает; на самом деле, там не совсем так, как я написал)
Во-вторых, можно было бы стразу сделать множество (set), а не список (list), (но да, у него чуть другие методы, чтобы не путать со списком):
unique_values = set()
for i in R:
unique_values.update(i)
for i in range(1, n + 1)
https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L157 https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/hasseDiagram.py#L47
Вместо
for i in range(1, n + 1): i
можно использоватьfor i in range(n): i + 1
. Не забудь в теле циклаi
на(i + 1)
заменить.Guard condition
Зачем
else
, если ты и так выкидываешь ошибку?https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L130-L132 https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L141-L145
https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L146-L151 (а тут вообще
else
в неправильном месте висит)list_unique
https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L133-L138
Во-первых, необязательно преобразовывать кортеж (tuple) в список (list), чтобы добавить его через метод
extend
, потому чтоextend
просто сделает что-то типа:То есть
extend
пройдётся по переданному черезfor
, а значит нужно понимать, что ему пойдёт любой итерируемый объект. По кортежу тоже можно черезfor
пройти, ведь он тоже итерируемый, поэтому необязательно его преобразовывать в список для добавления.Кстати, по факту, вызов list тебе сделает что-то типа следующего:
(для того, чтобы понимать, как это работает; на самом деле, там не совсем так, как я написал)
Во-вторых, можно было бы стразу сделать множество (set), а не список (list), (но да, у него чуть другие методы, чтобы не путать со списком):
Правдивость списков / Truthiness of List
https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L130
https://stackoverflow.com/questions/39983695/what-is-truthy-and-falsy-how-is-it-different-from-true-and-false
Пустые коллекции сразу возвращают
False
:Unpacking
https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L118
https://stackabuse.com/unpacking-in-python-beyond-parallel-assignment/
можно