我如何定义一个函数,其中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]
答案 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