我不知道为什么要打印[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]))
答案 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
,因为这是3
中lst1
的首次出现。
相反,您可以使用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()
函数