gpt4 book ai didi

Python:找到两个列表中的第一个不匹配项

转载 作者:太空狗 更新时间:2023-10-30 02:21:29 24 4
gpt4 key购买 nike

给定两个长度相同的列表,如何有效地找到这些列表的对应元素不相等的第一个位置?基本上我需要索引或两个不相等的元素。

我很感兴趣是否存在一些简洁的“Pythonic”解决方案,而没有对列表进行明显的显式迭代。

最佳答案

你无法避免对列表进行迭代,但你可以通过理解来做到这一点并获得优雅的解决方案:

next( (idx, x, y) for idx, (x, y) in enumerate(zip(list1, list2)) if x!=y )

如果你不喜欢以单行为中心的东西,你可以像这样拆分它

coupled_idx = enumerate(zip(list1, list2))
res = next( idx for idx, (x, y) in coupled_idx if x!=y )

编辑:

此外,如果您需要检查两个列表完全相等的情况,您可以向 next 函数添加第二个参数,告诉它如果没有找到索引则返回什么。最常见的选项是返回无:

coupled_idx = enumerate(zip(list1, list2))
res = next( (idx for idx, (x, y) in coupled_idx if x!=y), None )

请注意,您需要将生成器表达式括在括号中,因为它不是此调用中函数的唯一参数。

为了增加一点乐趣,您还可以通过链接表达式来询问第 n 对不同的夫妇。例如,这会为您提供直到第五对的所有对(如果缺少对,则用 None 填充)

coupled_idx = enumerate(zip(list1, list2))
coupler = (idx for idx, (x, y) in coupled_idx if x!=y)
res = [ next(coupler, None) for _ in range(5) ]

编辑2:

这种解决方案实际上是通过 zip 函数创建两个列表的副本。如果您需要避免这种情况,您可以改用 itertools 模块中的函数 izip

有趣的是,您可以通过来自同一模块的islice 功能仅选择某些解决方案

关于Python:找到两个列表中的第一个不匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15830663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com