很抱歉这个简单的问题,但是我很难找到答案。
当我比较2个列表时,我想知道它们是否“相等”,因为它们具有相同的内容,但是顺序不同。
例如:
x = ['a', 'b']
y = ['b', 'a']
我想x == y
评估True
。
您可以简单地检查带有x和y元素的多重集是否相等:
import collections
collections.Counter(x) == collections.Counter(y)
这要求元素是可哈希的。运行时将位于中O(n)
,其中n
列表大小。
如果元素也是唯一的,则还可以转换为集合(相同的渐近运行时,在实践中可能会快一点):
set(x) == set(y)
如果元素不是可哈希的,而是可排序的,则另一个替代方法(在中的运行时O(n log n)
)是
sorted(x) == sorted(y)
如果元素既不可散列也不可排序,则可以使用以下帮助函数。请注意,它将非常慢(O(n²)
),并且通常 不应 在 不可
散列和不可排序元素的神秘情况之外使用。
def equal_ignore_order(a, b):
""" Use only when elements are neither hashable nor sortable! """
unmatched = list(b)
for element in a:
try:
unmatched.remove(element)
except ValueError:
return False
return not unmatched
如何检查两个数组(循环)是否具有相同顺序的相同元素。例如,让我们以数组[1,2,3,4]为例。 对于[2,3,4,1]、[3,4,1,2]、[4,1,2,3],测试应返回true,但对于[1,3,2,4]、[1,4,2,3]或[1,2,3,5]则不返回true。 我最初的方法是找到第一个匹配项——每个数组中一个相等的元素——并将这两个元素视为各自数组的初始元素,我逐个比较了数组的其余元素。 有没有
问题内容: 我一直在寻找一种操作类似于的方法,但忽略了元素顺序。我在Google Collections(类似,但确实能说明订购)和JUnit(显然只是调用Collection,这取决于Collection的实现,而这并不是我想要的)中都找不到。如果此方法采用s 是最好的,但是我也可以简单地采用s。这样的方法当然会考虑集合中的所有重复元素(因此不能简单地测试)。 请注意,我并不是在问如何实现这样的
问题内容: 我试图确定一个大列表是否具有相同的连续元素。 所以说: 在这种情况下,我将返回true,因为存在两个连续的元素和,它们的值相同。 我知道可以通过某种形式的循环组合来完成此操作,但我想知道是否有更有效的方法来执行此操作? 问题答案: 您可以在 *中使用和生成器表达式: 或者,您可以使用,以一种更Python化的方式来检查列表中是否至少有两个相等的连续项: 注意:如果要检查是否有两个以上的
问题内容: 我需要以下功能: 输入: 输出: 如果输入列表中的所有元素使用标准相等运算符求值彼此相等; 除此以外。 性能:当然,我不希望产生任何不必要的开销。 我觉得最好: 遍历列表 比较相邻元素 和AND所有结果布尔值 但我不确定最Pythonic的方法是什么。 问题答案: 通用方法: 单线: 也是单线的: 这三个版本之间的区别在于: 在内容中必须是可哈希的。 并且可以使用任何迭代器,但chec
问题内容: 我注意到JSON对象中元素的顺序不是原始顺序。 JSON列表的元素呢?他们的订单得到维护吗? 问题答案: 是的,JSON数组中元素的顺序得以保留。从RFC 7159开始-JavaScript对象表示法(JSON)数据交换格式 (重点是我的): 对象是零个或多个名称/值对的 无序 集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。 数组是零个或多个值的 有序 序列。
问题内容: 我如何测试python中两个JSON对象是否相等,而忽略列表的顺序? 例如 … JSON文档a: JSON文档b: 并且应该比较相等,即使列表的顺序不同。 问题答案: 如果你想要两个具有相同元素但顺序不同的对象相等,那么显而易见的事情是比较它们的排序后的副本-例如,以JSON字符串和表示的字典: …但这是行不通的,因为在每种情况下,”errors”顶层dict的项都是具有相同元素的列表