打印匹配列表元素的索引

时间:2020-09-07 14:55:39

标签: python python-3.x for-loop

我不知道为什么要打印[0, 2, 3, 3]。我需要打印lst1中每个元素的索引,该索引等于lst2中的相应元素。所以我应该得到[0, 2, 3]。我是python的新手,所以我一定不要掌握for循环遍历列表或其他内容的顺序。

def same_values(lst1, lst2):
  final = []
  for num in lst1:
    if lst2[lst1.index(num)] == num:
      final.append(lst1.index(num))
  return final
print(same_values([5, 1, -10, 3, 3], [5, 10, -10, 3, 5]))

3 个答案:

答案 0 :(得分:3)

发生错误是因为一旦元素索引3和4相等,代码lst1.index(num)就会两次返回值3。

使用其他方法更安全:

def same_values(lst1, lst2):
    final = []
    for i in range(len(lst1)):
        if lst1[i] == lst2[i]:
            final.append(i)
    return final
print(same_values([5, 1, -10, 3, 3], [5, 10, -10, 3, 5]))

输出:

[0, 2, 3]

答案 1 :(得分:1)

lst1.index(3)将两次返回3,因为这是3lst1首次出现

相反,您可以使用zip并行遍历列表,并使用enumerate访问索引。

def same_values(lst1, lst2):
    final = []
    for i, (v1, v2) in enumerate(zip(lst1, lst2)):
        if v1 == v2:
            final.append(i)
    return final

print(same_values([5, 1, -10, 3, 3], [5, 10, -10, 3, 5]))  # -> [0, 2, 3]

for i, (v1, v2) in ...位使用嵌套的可迭代拆包。

此外,您可以将其简化为comprehension,尽管有点吵:

def same_values(lst1, lst2):
    return [i for i, (v1, v2) in enumerate(zip(lst1, lst2)) if v1 == v2]

答案 2 :(得分:0)

5,-10、3、3被匹配,因为您每次都要扫描整个第二个列表

注意:您可以使用枚举获取索引和元素

for i, num in enumerate(lst1):

如果要比较“对应的索引”,请访问两个列表并使用index(num)进行比较而不是“查找匹配元素的索引”

还可以检查zip()函数

相关问题