Это не ошибка дизайна . Любой, кто совершает это, делает что-то неправильно.
Есть три случая, когда я вижу, где вы можете столкнуться с этой проблемой:
cache={}
, и вы не должны были бы вызывать функцию с фактическим аргументом вообще. Пример в вопросе может относиться к категории 1 или 3. Нечетно, что он изменяет переданный список и возвращает его; вы должны выбрать тот или другой.
В целом логика относительно проста, но может сбивать с толку, и это частично связано с соглашениями об именах. Лучше избегать именования переменных именами классов (в данном случае List
), вы можете проверить Pep-8 для стандартов кодирования.
Кроме того, цикл while, кажется, немного усложняет вывод. Вы можете упростить с помощью вложенных циклов for:
master_list = [[] for element in range(len(t1[0]))]
for inner_tuple in t1:
for i in range(len(inner_tuple)):
master_list[i].append(inner_tuple[i])
Надеюсь, это поможет!
Когда вы звоните temp.clear()
, вы очищаете как временную переменную, так и то, что вы только что добавили в список. Одним из способов решения этой проблемы является использование copy
из модуля copy
для создания новой переменной для добавления в список, а затем очистка временной переменной должна повлиять на ваш окончательный список.
Код:
from copy import copy
t1 = ((1, 'Kamil'),
(2, 'Hassaan'))
t2 = ((1, 'python', 'print'),
(2, 'c++', 'cout'))
iSize = len(t1[0])
#print(len(t1))
index = 0
List = []
temp = []
r = 0
c = 0
while r < len(t1[0]):
while c < len(t1):
temp.append(t1[c][r])
c += 1
List.append(copy(temp))
print(List)
c = 0
temp.clear()
print(temp)
r += 1
print(List)