我有一个嵌套的元组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
的末尾为空。
答案 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)