【发布时间】:2020-09-08 09:57:20
【问题描述】:
我正在尝试循环并合并两个如下所示的列表:
T1 = [[['a', 1], ['c', 3]], [['e', 5], ['g', 7]], [['i', 9],['j', 11]]]
T2 = [[['m', 1], ['n', 5]], [['q', 7], ['r', 7]], [['t', 9],['u', 11]]]
例如,T1[0] = [['a', 1], ['c', 3]]
T2[0] = [['m', 1], ['n', 5]]
我正在编写本质上是一种合并算法的东西,我将 T1[0][0](1)中每个列表中的第二个元素与 T2[0][0] 中的第二个值(所以 1再次)。基本上我想要的是 T1[0][0][0] 和 T2[0][0][0]。如果它们匹配,我将这两个值合并为一个元组 {'a', 1, 'm'} (如果它使事情变得更容易,也可以是一个列表)。
我的困惑源于这样一个事实,即我不知道如何在不运行 3 次的情况下最好地循环 T1 和 T2:(T1[0], T2[0]), (T1[1], T2[ 1]), (T1[2], T2[2])
有没有办法优雅地循环遍历 T1 和 T2 以便我可以遍历 T1 和 T2 中的每个子列表并执行检查和合并?
注意:数据已经排序,我不想使用库。我想知道我自己能不能做到这一点。
##更新##
所以我知道这是一个for 循环,但是下面的代码是我所能得到的,它给我一个list index out of range 如下所示
result = []
i = j = 0
while True:
for s_T1 in T1:
for s_T2 in T2:
if s_T1[i][1] < s_T2[j][1]: ### error at this line
i = i + 1
elif s_T1[i][1] > s_T2[j][1]:
j = j + 1
elif s_T1[i][1] == s_T2[j][1]:
result.append(s_T1[i][0], str(s_T1[i][0), s_T2[j][0])
i = i + 1
j = j + 1
if i == len(T1) or j == len(T2):
break
return result
代码应该返回的是:
[[['a', 1, 'm']], [['g', 7, 'q'], ['g', 7, 'r']], [['i', 9, 't'], ['j', 11, 'u']]]
因此,查看 T1 中 ['e', 5] 中的整数,将其与 T2 中的 ['q', 7] 进行比较,因为 5 小于 7,所以移动到 T1 中的下一个值。如果它们匹配,则追加。反之亦然 - 如果 T1 中的值大于 T2 中的值,则移至 T1 中的下一个值。
【问题讨论】:
-
请用您尝试过的代码更新您的问题。
-
根据您的示例输入,还使用所需的输出更新您的问题。
-
两个列表中
['e', 5, 'n']的结果不在同一个“索引”中,这是一个错误,还是应该将T1中的每个索引与T2的每个索引进行比较? -
@quamrana 我已经更新了我的问题。对我的循环的任何帮助也很感激
-
@soapycat 然后我认为
['g', 7, 'q']也不应该在那里正确吗?
标签: python python-3.x list loops