Как я могу добавить вложенные элементы кортежа в список?

Это не ошибка дизайна . Любой, кто совершает это, делает что-то неправильно.

Есть три случая, когда я вижу, где вы можете столкнуться с этой проблемой:

  1. Вы намерены изменить аргумент как сторону эффект функции. В этом случае никогда не имеет смысла иметь аргумент по умолчанию. Единственное исключение - когда вы злоупотребляете списком аргументов, чтобы иметь функциональные атрибуты, например. cache={}, и вы не должны были бы вызывать функцию с фактическим аргументом вообще.
  2. Вы намерены оставить аргумент немодифицированным, но вы случайно сделали изменить его , Это ошибка, исправьте ее.
  3. Вы намерены изменить аргумент для использования внутри функции, но не ожидали, что изменение будет доступно для просмотра вне функции. В этом случае вам нужно сделать копию аргумента, независимо от того, был ли он по умолчанию или нет!

Пример в вопросе может относиться к категории 1 или 3. Нечетно, что он изменяет переданный список и возвращает его; вы должны выбрать тот или другой.

-1
задан Georgy 26 March 2019 в 15:03
поделиться

2 ответа

В целом логика относительно проста, но может сбивать с толку, и это частично связано с соглашениями об именах. Лучше избегать именования переменных именами классов (в данном случае 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])

Надеюсь, это поможет!

0
ответ дан nickthefreak 26 March 2019 в 15:03
поделиться

Когда вы звоните 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)
0
ответ дан Hoog 26 March 2019 в 15:03
поделиться
Другие вопросы по тегам:

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