我如何判断一个数字列表(或可迭代对象)中的所有数字符号是否相同?
以下是我最初的(幼稚的)草稿:
def all_same_sign(list):
negative_count = 0
for x in list:
if x < 0:
negative_count += 1
return negative_count == 0 or negative_count == len(list)
有没有更符合Python代码规范且正确的方法?首先想到的是,在遇到相反符号时停止迭代。
更新
我喜欢目前为止给出的答案,尽管我对性能有些疑虑。我不是一个追求性能的狂热分子,但我认为在处理列表时考虑性能是合理的。对于我的特定用例,我认为这不是什么大问题,但为了完整地回答这个问题,我认为需要解决这个问题。据我所知,min和max函数具有O(n)性能。到目前为止提出的两个答案具有O(2n)性能,而上面的程序在检测到相反符号时添加了短路以使其最差也只有O(n)性能。你怎么看?
O(n)
和O(2n)
是完全相同的东西。任何解决这个问题的算法都将具有o(n)
最坏情况性能,因为它必须检查每个元素。最后,如果您关心性能,我建议您在典型数据上对候选方法进行基准测试。 - NPE