如何将两个不同长度的列表迭代在一起?
How to iterate two lists with different length together?
我得到了如下所示的两个列表:
a = [[[1,2], [3, 4], [5,6]], [[8,9],[10,11]]]
b = [[[1,2], [1,3],[2,3],[3, 4],[4,6],[5,6]],[[8,9],[9,10],[10,11]]]
两个列表中的值都是一组坐标点列表。并且你可以注意到 list a
中的一些坐标点也显示在 list b
中
我的目标是从 list a
的给定坐标点切出 list b
,然后追加到一个新列表中。这是我期望得到的示例。
例子
list a
的第一项是[[1,2], [3, 4], [5,6]]
,我命名为a[0]
,而list b
的第一项是[[1,2], [1,3],[2,3],[3, 4],[4,6],[5,6]]
,我命名为[=22] =].因此,a[0]
是一组b[0]
我想根据 a[0]
中的值将 b[0]
分割成一个看起来像 [[[1,2],[1,3],[2,3],[3,4]],[[3, 4],[4,6],[5,6]]]
的新列表。也就是说,a[0]
作为b[0]
的切片索引。
下面是我的代码,我不知道要执行上面的语句。
for items in a:
c.append([])
for i,j in zip(range(len(items)),range(len(b))):
if i < len(items)-1:
L_i = b[j][b[j].index(a[i]):b[j].index(a[i+1])+1]
L_i = list(tuple(item) for item in L_i)
elif i == len(concave_points)-1:
temp1 = b[j][b[j].index(a[i]):]
temp2 =b[j][0:b[j].index(a[0])+1]
L_i = temp1 + temp2
L_i = list(tuple(item) for item in L_i)
并且发生错误ValueError: [[1, 2], [3, 4], [5, 6]] is not in list
。
非常感谢。
您可以压缩列表而不是它们的长度,只需按索引对子列表进行切片
a = [[[1, 2], [3, 4], [5, 6]], [[8, 9], [10, 11]]]
b = [[[1, 2], [1, 3], [2, 3], [3, 4], [4, 6], [5, 6]], [[8, 9], [9, 10], [10, 11]]]
c = []
for aa, bb in zip(a, b):
for i in range(len(aa) - 1):
c.append(bb[bb.index(aa[i]):bb.index(aa[i + 1]) + 1])
print(c) # [[[1, 2], [1, 3], [2, 3], [3, 4]], [[3, 4], [4, 6], [5, 6]], [[8, 9], [9, 10], [10, 11]]]
和列表推导式一样
c = [bb[bb.index(aa[i]):bb.index(aa[i + 1]) + 1] for aa, bb in zip(a, b) for i in range(len(aa) - 1)]
a = [[1, 2], [3, 4], [5, 6]]
b = [[1, 2], [1, 3], [2, 3], [3, 4], [4, 6], [5, 6]]
union_a_b = []
a.extend(b)
for pair in a:
if pair not in union_a_b:
union_a_b.append(pair)
else:
continue
print(union_a_b)
我得到了如下所示的两个列表:
a = [[[1,2], [3, 4], [5,6]], [[8,9],[10,11]]]
b = [[[1,2], [1,3],[2,3],[3, 4],[4,6],[5,6]],[[8,9],[9,10],[10,11]]]
两个列表中的值都是一组坐标点列表。并且你可以注意到 list a
中的一些坐标点也显示在 list b
我的目标是从 list a
的给定坐标点切出 list b
,然后追加到一个新列表中。这是我期望得到的示例。
例子
list a
的第一项是[[1,2], [3, 4], [5,6]]
,我命名为a[0]
,而list b
的第一项是[[1,2], [1,3],[2,3],[3, 4],[4,6],[5,6]]
,我命名为[=22] =].因此,a[0]
是一组b[0]
我想根据 a[0]
中的值将 b[0]
分割成一个看起来像 [[[1,2],[1,3],[2,3],[3,4]],[[3, 4],[4,6],[5,6]]]
的新列表。也就是说,a[0]
作为b[0]
的切片索引。
下面是我的代码,我不知道要执行上面的语句。
for items in a:
c.append([])
for i,j in zip(range(len(items)),range(len(b))):
if i < len(items)-1:
L_i = b[j][b[j].index(a[i]):b[j].index(a[i+1])+1]
L_i = list(tuple(item) for item in L_i)
elif i == len(concave_points)-1:
temp1 = b[j][b[j].index(a[i]):]
temp2 =b[j][0:b[j].index(a[0])+1]
L_i = temp1 + temp2
L_i = list(tuple(item) for item in L_i)
并且发生错误ValueError: [[1, 2], [3, 4], [5, 6]] is not in list
。
非常感谢。
您可以压缩列表而不是它们的长度,只需按索引对子列表进行切片
a = [[[1, 2], [3, 4], [5, 6]], [[8, 9], [10, 11]]]
b = [[[1, 2], [1, 3], [2, 3], [3, 4], [4, 6], [5, 6]], [[8, 9], [9, 10], [10, 11]]]
c = []
for aa, bb in zip(a, b):
for i in range(len(aa) - 1):
c.append(bb[bb.index(aa[i]):bb.index(aa[i + 1]) + 1])
print(c) # [[[1, 2], [1, 3], [2, 3], [3, 4]], [[3, 4], [4, 6], [5, 6]], [[8, 9], [9, 10], [10, 11]]]
和列表推导式一样
c = [bb[bb.index(aa[i]):bb.index(aa[i + 1]) + 1] for aa, bb in zip(a, b) for i in range(len(aa) - 1)]
a = [[1, 2], [3, 4], [5, 6]]
b = [[1, 2], [1, 3], [2, 3], [3, 4], [4, 6], [5, 6]]
union_a_b = []
a.extend(b)
for pair in a:
if pair not in union_a_b:
union_a_b.append(pair)
else:
continue
print(union_a_b)