相关疑难解决方法(0)

检查列表中的所有数字是否与Python中的符号相同?

如何判断列表(或可迭代)的数字是否都具有相同的符号?

这是我的第一个(幼稚)草案:

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)
Run Code Online (Sandbox Code Playgroud)

有更多的pythonic和/或正确的方法吗?首先想到的是一旦你有相反的迹象就停止迭代.

更新

到目前为止,我喜欢这些答案,尽管我对表现感到疑惑 我不是一个表演迷,但我认为在处理列表时考虑性能是合理的.对于我的特定用例,我不认为这将是一个大问题,但为了完整这个问题,我认为解决它是好的.我的理解是min和max函数具有O(n)性能.到目前为止,两个建议的答案具有O(2n)性能,而一旦检测到相反的符号,我的上述例程添加短路退出将具有最差的O(n)性能.思考?

python sign list python-2.7

4
推荐指数
2
解决办法
4031
查看次数

为什么'真或假'比'假或真'更快?

我运行了代码

a = True
b = False
c = False
d = False
e = False
import time
iterations = int(1e6)
start = time.time()
for _ in range(iterations):
    a or b or c or d or e
print(time.time() - start)
start = time.time()
for _ in range(iterations):
    b or c or d or e or a
print(time.time() - start)
Run Code Online (Sandbox Code Playgroud)

结果

0.10876178741455078
0.26296424865722656
Run Code Online (Sandbox Code Playgroud)
  • 为什么布尔评估的顺序会对速度产生影响?
  • 是因为某种形式的优化?
  • 如果有,我可以阅读资源吗?

python optimization time boolean

3
推荐指数
1
解决办法
202
查看次数

在 Python3 中比较 int 和 None 没有 TypeError

我知道比较 int 和 None 类型在 Python3 (3.6.1) 中无效,正如我在这里看到的:

>>> largest = None
>>> number = 5
>>> number > largest
TypeError: '>' not supported between instances of int and NoneType
Run Code Online (Sandbox Code Playgroud)

但在这个脚本中,它没有给出 TypeError。

largest = None
for number in [5, 20, 11]:
    if largest is None or number > largest:
        largest = number
Run Code Online (Sandbox Code Playgroud)

当我使用 python3 运行此脚本时,它运行时不会出现 TypeError。为什么?

python short-circuiting python-3.x nonetype

3
推荐指数
1
解决办法
1740
查看次数

在Python列表中找到高于特定阈值的最小值

我正在尝试在列表中找到某个阈值以上的最小值,而不使用min()函数(我正在通过实践的方式来做事情)。

我先创建了一个高于阈值的值列表,然后遍历该列表,然后将一个值保存到小于先前看到的值的变量中来进行管理:

def minpass(mymarks, mypass):
    passed= [x for x in mymarks if x >= mypass]
    min_value = passed[0]
    for x in passed: 
        if x < min_value:
            min_value = x
    return min_value

x = [2, 53, 90]
y = 50

minpass(x, y)
Run Code Online (Sandbox Code Playgroud)

这将正确返回53。

是否可以在不创建第二个列表(通过)的情况下执行此操作?为什么添加第二个条件不起作用?例如

def minpass(mymarks, mypass):
    min_value = mymarks[0]
    for x in mymarks: 
        if x < min_value and x >= mypass:
            min_value = x
    return min_value

x = [2, 53, 90]
y = 50

minpass(x, y)
Run Code Online (Sandbox Code Playgroud)

这将错误地返回2而不是53。

python

3
推荐指数
1
解决办法
1946
查看次数

"4和5"是5,而"4或5"是4.有什么原因吗?

当我测试的区别andor,我遇到了这个问题.你能帮我理解一下吗?

python

2
推荐指数
1
解决办法
221
查看次数

和/或Python中两个对象之间的运算符

我必须维护一个自2008年以来不再更新的python包.我想当时开发人员使用的Python版本是2.3或2.4,我猜.大多数源代码都是一样的,但我找到了类似的东西:

fsa = (fsa and union(fsa, fsa2)) or fsa2
Run Code Online (Sandbox Code Playgroud)

其中fsa,fsa2,union(fsa, fsa2)都是对象.我不知道他们如何工作来返回新对象.有人可以给我一些提示吗?此外,这些运算符是否仍然允许在Python 2.7中使用?如果不是,我如何更改它以使其在Python 2.7中正常工作?

谢谢,

python python-2.7

2
推荐指数
1
解决办法
438
查看次数

在if语句中检查后引用可能不存在的变量是否安全?

假设我有一个名为prop的成员的myObject类.我有一个变量var,可能是也可能不是myObject.我想检查prop是否包含某个值,如果是,则执行某些操作,如果没有,或者var不是myObject,请执行.

执行以下操作是否安全:

if isinstance(var, myObject) and var.prop == 10:
    #Do something
Run Code Online (Sandbox Code Playgroud)

基本上,如果第一部分的计算结果为False,是否可以保证不会检查if语句的第二部分?如果检查即使var不是myObject,也会引发错误.

python logic if-statement boolean

1
推荐指数
1
解决办法
98
查看次数

Python并不是None

我在使用这段代码时遇到了一些麻烦:

if not fundbenchmark.endswith(("Index", "INDEX")) and fundbenchmark is not None:
    fundbenchmark = "%s%s" % (fundbenchmark, " Index")
Run Code Online (Sandbox Code Playgroud)

追溯:

AttributeError: 'NoneType' object has no attribute 'endswith'
Run Code Online (Sandbox Code Playgroud)

当出现显然这个错误fundbenchmarkNone.暗示存在问题and fundbenchmark is not None:

我在这个假设中是正确的还是可以在其他地方找到解释?

python

1
推荐指数
1
解决办法
868
查看次数

在Python中使用数字的布尔值

我在Python中遇到了gcd的这个实现:

def gcd(x,y): return y and gcd(y, x % y) or x
Run Code Online (Sandbox Code Playgroud)

我不明白的是布尔值在返回时是如何工作的?在解释器中尝试了一些数字后,我注意到and总是返回右边or的数字,而返回左边的数字.为什么是这样?另外,您可以一步一步地通过简单调用此函数来指导我,以便了解发生了什么?

python boolean

1
推荐指数
1
解决办法
202
查看次数

复合相等测试在python中短路了吗?

python 是否短路布尔值a==b==c,即,如果a==b为假,则不评估第二个等式?复合相等只是 的语法糖a==b and b==c吗?

python

1
推荐指数
1
解决办法
44
查看次数

为什么两个值上的 and 运算符给出最后一个值?

我一直在对 Python 运算符进行一些修改,但遇到了一些我不确定的事情。

如果我对 2 个整数执行按位运算 (&, |) ,我将毫不奇怪地得到它们的按位值
。意义:

>>> a = 11
>>> b = 3
>>> a & b
3
Run Code Online (Sandbox Code Playgroud)

这是因为按位和执行和对这些数字的二进制表示。但是,如果我使用内置的 and 运算符,我将获得第二个变量,而不管它是什么类型:

>>> b and a
11

>>> 'b' and 'a'
'a'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

python logical-operators python-3.x

1
推荐指数
1
解决办法
91
查看次数

如何检查任何数组值的长度是否等于 1

我想检查数组中值的任何长度是否等于 1。我有一个数组

SLR = [4, 4000, 4010]
Run Code Online (Sandbox Code Playgroud)

我想检查这些值中的任何一个的长度:是否等于 1。在这种情况下,它是真的,因为有 4。

我试图这样做,但当然失败了:

SLR = [4, 4000, 4010]

if(any(len(SLR)) == 1):
        print("True")
    else:
        print("False")
Run Code Online (Sandbox Code Playgroud)

python

0
推荐指数
1
解决办法
61
查看次数

为什么表达“真或真假”是真的?

我在 Kaggle 对 Python 数据科学的介绍中遇到了这个表达式。我什至很难理解这意味着什么。你怎么能确定这个表达式是真的?

python logic boolean

-1
推荐指数
1
解决办法
69
查看次数