使用函数或其他函数在两个列表之间的特定索引中查找元素

时间:2018-08-31 04:43:44

标签: python-3.x

我如何定义一个函数,其中a和b会返回7和5 或a[0]b[0]以及a[4]b[4]。问题是两个列表的长度都可能随时更改...

我尝试过:

  if a[0]== b[0]: 
        print(a[0]) 

但是如果列表的长度发生变化,则最终将返回列表索引超出范围错误。

非常感谢您的帮助。

  • a = [7, 5, 9, 3, 5, 3, 6, 7, 8, 4, 3, 3, 4, 5]

  • b = [7, 3, 3, 5, 5, 2, 1, 5, 2, 5, 2, 9, 8, 6]

1 个答案:

答案 0 :(得分:0)

zip压缩两个lizts并对其进行迭代:

a = [7, 5, 9, 3, 5, 3, 6, 7, 8, 4, 3, 3, 4, 5]
b = [7, 3, 3, 5, 5, 2, 1, 5, 2, 5, 2, 9, 8, 6]

for a_i, b_i in zip(a, b):
    if a_i == b_i:
        print(a_i, b_i)

Out:
7, 7
5, 5

或将其定义为功能:

def extract_matches(a, b):
    result = []
    for a_i, b_i in zip(a, b):
        if a_i == b_i:
            result.append((a_i, b_i))
    return result

matches = extract_matches(a, b)    
matches
Out:
[(7, 7), (5, 5)]

zip的工作方式。 zip函数始终将列表压缩得更短。它返回一个生成器,因此您应该对其进行迭代:

list(zip([1,2,3], [1,2]))  
Out:
[(1, 2), (1, 2)]  # list of pairs

list(zip([], [1,2,3]))  
Out:
[]  # length of shorter is 0, so you get zero length list