【发布时间】:2015-07-16 13:01:58
【问题描述】:
我有两个以下列方式列出的列表,我正在尝试以某种特定的方式比较它们:
a = [[18, 299, 559], [18, 323, 564], [18, 353, 564], [18, 391, 570], [18, 448, 570]]
b = [[18, 353, 564], [18, 299, 559], [18, 323, 564], [18, 391, 570], [18, 448, 570]]
我想要什么
我想按以下顺序将a 的每个元素与b 进行比较。
例如,在上述情况下,在a 的第一个元素[18, 299, 559] 等于b 的[18, 299, 559] 之后,循环将中断并且在新循环中a 的第二个元素@ 即[18, 323, 564] 将被比较从[18, 323, 564] 到b 及以后。
这里的要点是,新循环不应该从b 的第一个元素重新开始迭代,同时将a 的所有元素分别与第0 个索引的b 的所有元素进行比较。
P.S. 在此示例中,我不是要检查两个列表中是否存在元素,也不是要查找任何缺失的元素,这可以通过使用 set 方法轻松完成。这个逻辑仅供我自己了解
我尝试了什么
所有普通的嵌套循环方法如下:
for i in a:
for j in b: #after break it would always start with first element in b
if i == j:
break
这里的问题是在每个break new i 与b 的第一个元素进行比较之后,而不是从与a 匹配的最后一个元素进行比较
我脑海中的想法是这样的:
for i in a:
for j in b:
if i == j:
print something
save index of j
break
in the next loop start comparing new i from this saved index of j
然而,我无法将这个想法放入代码中。
我知道这听起来很荒谬,但就循环而言,这样的事情可以在 python 中实现吗?欢迎所有想法和提示。
【问题讨论】:
-
你试过
continue而不是break吗? -
@lanAuld 不,我没有。让我看看
-
@LanAuld 尝试在上面的代码中用
continue替换break,但仍然没有得到我想要的。你能强调一下我应该如何使用它吗? -
@MathiasEttinger 使用 zip 两个循环将以并行方式迭代。这只会逐行比较两个元素。