我需要以下功能:
输入:alist
输出:
True
如果输入列表中的所有元素使用标准相等运算符求值彼此相等;False
除此以外。性能:当然,我不希望产生任何不必要的开销。
我觉得最好:
但我不确定最Pythonic的方法是什么。
通用方法:
def checkEqual1(iterator):
iterator = iter(iterator)
try:
first = next(iterator)
except StopIteration:
return True
return all(first == rest for rest in iterator)
单线:
def checkEqual2(iterator):
return len(set(iterator)) <= 1
也是单线的:
def checkEqual3(lst):
return lst[1:] == lst[:-1]
这三个版本之间的区别在于:
checkEqual2
内容中必须是可哈希的。checkEqual1
并且checkEqual2
可以使用任何迭代器,但checkEqual3必须接受序列输入,通常是列表或元组之类的具体容器。checkEqual1
发现差异后立即停止。checkEqual1
包含更多的Python代码,因此当许多项目在开始时相等时效率较低。checkEqual2
并checkEqual3
始终执行O(N)复制操作,因此,如果你的大多数输入将返回False,它们将花费更长的时间。checkEqual2
,checkEqual3
很难适应从a == b
到的比较a is b
。timeit
结果,对于Python 2.7和(仅s1,s4,s7,s9应该返回True)
s1 = [1] * 5000
s2 = [1] * 4999 + [2]
s3 = [2] + [1]*4999
s4 = [set([9])] * 5000
s5 = [set([9])] * 4999 + [set([10])]
s6 = [set([10])] + [set([9])] * 4999
s7 = [1,1]
s8 = [1,2]
s9 = []
我们得到
| checkEqual1 | checkEqual2 | checkEqual3 | checkEqualIvo | checkEqual6502 |
|-----|-------------|-------------|--------------|---------------|----------------|
| s1 | 1.19 msec | 348 usec | 183 usec | 51.6 usec | 121 usec |
| s2 | 1.17 msec | 376 usec | 185 usec | 50.9 usec | 118 usec |
| s3 | 4.17 usec | 348 usec | 120 usec | 264 usec | 61.3 usec |
| | | | | | |
| s4 | 1.73 msec | | 182 usec | 50.5 usec | 121 usec |
| s5 | 1.71 msec | | 181 usec | 50.6 usec | 125 usec |
| s6 | 4.29 usec | | 122 usec | 423 usec | 61.1 usec |
| | | | | | |
| s7 | 3.1 usec | 1.4 usec | 1.24 usec | 0.932 usec | 1.92 usec |
| s8 | 4.07 usec | 1.54 usec | 1.28 usec | 0.997 usec | 1.79 usec |
| s9 | 5.91 usec | 1.25 usec | 0.749 usec | 0.407 usec | 0.386 usec |
注意:
# http://stackoverflow.com/q/3844948/
def checkEqualIvo(lst):
return not lst or lst.count(lst[0]) == len(lst)
# http://stackoverflow.com/q/3844931/
def checkEqual6502(lst):
return not lst or [lst[0]]*len(lst) == lst
本文向大家介绍检查列表是否包含Python中的所有唯一元素,包括了检查列表是否包含Python中的所有唯一元素的使用技巧和注意事项,需要的朋友参考一下 python中的列表可以包含所有元素,这些元素可能是唯一的,也可能不是唯一的。但是对于需要特殊元素的情况,例如标记班级不同卷号的出勤率。以下是可以使用的方法。 用 python集是无序,未索引且还包含唯一元素的集合。因此,我们将比较从列表创建的集合
问题内容: 我有这样的df: 以及物品清单: 我的目标是从中获取至少包含2个元素的所有行。 我想出了以下解决方案: 这给了我我想要的,但是就可伸缩性而言,它可能不是最佳的解决方案。是否有任何“向量化”解决方案?谢谢 问题答案: 我会建立一个Series列表,然后应用vectorized : 它给出了预期的结果:
问题内容: 如何检查列表中的元素是否属于同一类型,而又尽可能不检查每个元素? 例如,我想要一个函数来检查此列表中的每个元素是否为整数(显然是错误的): 问题答案: 尝试与结合使用: 您甚至可以根据需要检查多种类型: 并不是说这也会选择继承的类。例如: 如果您 需要 将自己限制为整数,可以使用。但这是 非常 罕见的情况。 您可以编写一个有趣的函数,如果所有其他元素都是同一类型,它将返回序列中第一个元
开始时,所有标志均为0。我使用while循环来检查是否至少有一个元素的标志为0: 如果返回,那么我将继续处理我的列表: 实际上,我想在迭代my_list时移除元素,但不允许在迭代时移除项。 由于我无法在迭代时删除元素,所以我发明了这些标志。但是包含许多项,循环在每个循环中读取所有项,这会消耗大量时间!你有什么建议吗?
问题内容: 由于所有元素均为“ false”,如何返回“ false”? 给定的列表是: 问题答案: 使用: 如果可迭代项中有任何真值,则将返回True。
问题内容: Swift中是否有一个函数可以检查数组的所有元素是否具有相同的值?就我而言,它是一个type数组。我知道我可以使用一个简单的for循环对其进行迭代,我只是想知道是否内置了某些东西并且速度更快。 问题答案: 任何方法都必须遍历所有元素,直到找到另一个元素: 可以使用以下函数来代替显式循环: 如果数组元素是(例如),则可以从数组元素创建一个(从Swift 1.2开始可用),并检查它是否恰好