Как добавить вложенные элементы кортежа в список? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть вложенный кортеж t1 = ((1, 'Kamil'), (2, 'Hassaan')), и я хочу скопировать элементы кортежа в список, подобный этому: [[1, 2], [Kamil, Hassaan]]. Возьмите 1 and 2 и объедините их. Возьмите Kamil and Hassaan и объедините их. Объедините их вместе в небольшой список (temp) и добавьте temp в List.

Это мой код:

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(temp)
    print(List)

    c = 0
    temp.clear()
    print(temp)
    r += 1

print(List)

Вы увидите несколько ненужных команд печати. Я использовал их, чтобы проверить мой код. Я не могу понять, почему после одной итерации элементы List перезаписываются, а затем весь List становится пустым в конце.

Ответы [ 3 ]

1 голос
/ 26 марта 2019

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

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

1 голос
/ 26 марта 2019

Когда вы вызываете 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 голосов
/ 26 марта 2019

Я не уверен, что вам нужен весь процесс, но если в результате получится два списка в списке, разделенных типом данных (алфавиты и цифры), вы можете попробовать это:

t1 = ((1, 'Kamil'), (2, 'Hassaan'))

list_one = []
list_two = []
result = []
for i in t1:
    list_one.append(i[0])
    list_two.append(i[1])

result.append(list_one)
result.append(list_two)
print(result)
...