Python遍历lis中的特定元素

2024-03-29 12:47:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下两个列表,我试图以某种特定的方式比较它们:

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]]

我想要什么

我想按以下顺序比较ab的每个元素。你知道吗

例如,在上述情况下,当a的第一个元素[18, 299, 559]等于b[18, 299, 559]之后,循环将中断,并且在新的循环中a的第二个元素[18, 323, 564]将从b[18, 323, 564]开始进行比较。你知道吗

这里的要点是,新循环不应该从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新的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实现吗?欢迎所有的意见和提示。你知道吗


Tags: of方法in元素列表forindexif
3条回答

这个怎么样:

start_idx = 0
for i in a:
    for j_idx, j in enumerate(b[start_idx:], start=start_idx):
        if j==a:
            print 'Bingo!'
            start_idx = j_idx
            break

p.S范围(len(a))-很难看:)

当然,你可以追踪到你已经走了多远。我将这个变量称为start_j,从那时起,它就可以在b中开始比较:

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]]

start_j = 0

for i in range(len(a)):
    for j in range(start_j, len(b)):
        if a[i] == b[j]:
            print 'match found:', i, j
            start_j = j
            break

如果找到了匹配的元素,start_j被设置为最新的j,下一次内部循环(用于检查b中的元素)从那里开始。你知道吗

输出:

match found: 0 1
match found: 1 2
match found: 3 3
match found: 4 4

下面是如何做到这一点没有继续或喙。。。你知道吗

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]]

matches = []

for i in xrange(len(a)):
    for j in xrange(len(b)):
        if a[i] == b[j]:
            matches.append([i,j])

for match in matches: print(match)

相关问题 更多 >