【问题标题】:i need assistance with looping lists together [duplicate]我需要帮助将列表循环在一起[重复]
【发布时间】:2021-08-02 16:14:04
【问题描述】:

我有 2 个列表:

A[15, 12, 13, 19, 14, 10, 16, 20, 9, 18, 8, 7]

B[19, 14, 8, 16, 20, 9, 18, 15, 12, 13, 7, 10]

所有元素都是相似的,我只需要帮助想出一个暴力算法,它将相似元素的索引打印到列表中

例如:

A[0] with B[7] (for number 15)

A[1] with B[8] (for number 12)

这就是输出

等等……

我已经开始了

a = [15, 12, 13, 19, 14, 10, 16, 20, 9, 18, 8, 7]
b = [19, 14, 8, 16, 20, 9, 18, 15, 12, 13, 7, 10]

for i in range(0, len(a)):
    for j in range(0, len(b)):

我不知道从这里去哪里,好吧,我试过打印索引,但它只是说

ValueError: 0 is not in list

并尝试了另一种方法,但它只是将整个列表打印了 10 次左右......

【问题讨论】:

  • 只需要在b中查找i的索引,不需要第二个循环
  • @Sayse 仅当真实数据不包含重复值时才是正确的(因为index() 总是找到第一个匹配项)。

标签: python


【解决方案1】:

假设列表a 的所有元素都是唯一的并且在列表b 中只出现一次,您可以这样使用list.index

a = [15, 12, 13, 19, 14, 10, 16, 20, 9, 18, 8, 7]
b = [19, 14, 8, 16, 20, 9, 18, 15, 12, 13, 7, 10]

for ia, x in enumerate(a):
    ib = b.index(x)
    print(f"a[{ia}] with b[{ib}] (for number {x})")

输出

a[0] with b[7] (for 15)
a[1] with b[8] (for 12)
a[2] with b[9] (for 13)
a[3] with b[0] (for 19)
...

长期以来lists 可能值得通过首先创建字典来加速b.index() 查找:

idx_b = {x: idx for idx, x in enumerate(b)}

for ia, x in enumerate(a):
    ib = idx_b[x]
    print(f"a[{ia}] with b[{ib}] (for number {x})")

【讨论】:

  • 我不确定创建字典的过程是否会提高效率,这对我来说似乎是最好的方法
  • @Sayse 是的。你可能是对的......这让我很困扰,这与n^2 相比,而它可以在2*n 中完成。
【解决方案2】:

不是最有效的方法,但既然你说蛮力,这应该有效:

A = [15, 12, 13, 19, 14, 10, 16, 20, 9, 18, 8, 7]

B = [19, 14, 8, 16, 20, 9, 18, 15, 12, 13, 7, 10]

for a in A:
    for b in B:
        if a == b:
            print('A['+ str(A.index(a)) + '] and B[' + str(B.index(b)) + '] for number ' + str(a))

输出:

A[0] and B[7] for number 15
A[1] and B[8] for number 12
A[2] and B[9] for number 13
A[3] and B[0] for number 19
A[4] and B[1] for number 14
A[5] and B[11] for number 10
A[6] and B[3] for number 16
A[7] and B[4] for number 20
A[8] and B[5] for number 9
A[9] and B[6] for number 18
A[10] and B[2] for number 8
A[11] and B[10] for number 7

【讨论】:

    【解决方案3】:

    这对我有用。

    a = [15, 12, 13, 19, 14, 10, 16, 20, 9, 18, 8, 7]
    b = [19, 14, 8, 16, 20, 9, 18, 15, 12, 13, 7, 10]
    for i in range(len(a)):
        for j in range(len(b)):
            if a[i]==b[j]:
                print(f"a[{i}] with b[{j}] (for number {a[i]})")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2013-05-24
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多