如何在列表中附加嵌套元组项?

时间:2019-03-26 14:07:16

标签: python list tuples

我有一个嵌套的元组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 个答案:

答案 0 :(得分:1)

调用temp.clear()时,您将同时清除临时变量和刚刚添加到列表中的内容。解决此问题的一种方法是使用copy模块中的copy创建一个新变量以追加到列表中,然后清除temp变量必须影响最终列表。

代码:

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)

答案 1 :(得分:1)

总体而言,逻辑比较简单,但可能会造成混淆,部分原因是命名约定。最好避免使用类名来命名变量(在这种情况下为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])

希望这会有所帮助!

答案 2 :(得分:0)

我不确定您想要的整个过程是什么,但是如果结果是列表中有两个列表,并用数据类型(字母和数字)隔开,则可以尝试以下操作:

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)