相关疑难解决方法(0)

ValueError:具有多个元素的数组的真值是不明确的.使用a.any()或a.all()

我刚刚在代码中发现了一个逻辑错误,导致了各种各样的问题.我无意中做了一个按位AND而不是逻辑AND.

我更改了代码:

r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) & (r["dt"] <= enddate))
selected = r[mask]
Run Code Online (Sandbox Code Playgroud)

至:

r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) and (r["dt"] <= enddate))
selected = r[mask]
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我收到了相当神秘的错误消息:

ValueError:具有多个元素的数组的真值是不明确的.使用a.any()或a.all()

为什么在使用按位操作时没有发出类似的错误 - 我该如何解决这个问题?

python numpy

190
推荐指数
4
解决办法
51万
查看次数

如何检查列表的所有元素是否与条件匹配?

我有一个包含20000个列表的列表.我使用每个列表的第3个元素作为标志.我希望在此列表上执行一些操作,只要至少有一个元素的标志为0,它就像:

my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
Run Code Online (Sandbox Code Playgroud)

在开始时,所有标志都是0.我使用while循环来检查至少一个元素的标志是否为0:

def check(list_):
    for item in list_:
        if item[2] == 0:
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

如果check(my_list)返回True,那么我继续处理我的列表:

while check(my_list):
    for item in my_list:
        if condition:
            item[2] = 1
        else:
            do_sth()
Run Code Online (Sandbox Code Playgroud)

实际上,当我迭代它时,我想删除my_list中的一个元素,但是当我迭代它时,我不允许删除项目.

原始的my_list没有标志:

my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]
Run Code Online (Sandbox Code Playgroud)

因为我迭代它时无法删除元素,所以我发明了这些标志.但是它my_list包含很多项,并且while循环在每个for循环中读取所有项,并且它会消耗大量时间!你有什么建议吗?

python for-loop list while-loop

188
推荐指数
3
解决办法
26万
查看次数

Python - 验证一个列表是否是另一个列表的子集

我需要验证列表是否是另一个列表的一个子集 - 布尔返回是我寻求的全部内容.
在交叉路口之后测试相等的较小列表是最快的方法吗?
考虑到需要比较的数据集数量,性能至关重要.
根据讨论添加更多事实:

  1. 对于许多测试,其中一个列表是否相同?
    它确实是其中一个是静态查找表
  2. 它需要是一个列表吗?
    它没有 - 静态查找表可以是性能最佳的.
    动态的是一个dict,我们从中提取密钥以执行静态查找.

在这种情况下,最佳解决方案是什么?

python list

160
推荐指数
6
解决办法
18万
查看次数

Pythonic方法检查条件是否适用于列表的任何元素

我有一个Python列表,我想检查是否有任何元素是否定的.Specman有has()列表的方法:

x: list of uint;
if (x.has(it < 0)) {
    // do something
};
Run Code Online (Sandbox Code Playgroud)

itSpecman关键字在哪里依次映射到列表的每个元素.

我觉得这很优雅.我查看了Python文档,找不到类似的东西.我能想到的最好的是:

if (True in [t < 0 for t in x]):
    # do something
Run Code Online (Sandbox Code Playgroud)

我发现这相当不优雅.有没有更好的方法在Python中执行此操作?

python list

100
推荐指数
3
解决办法
9万
查看次数

python any()函数究竟是如何工作的?

在python docs页面中any,any()函数的等效代码如下:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

如果以这种形式调用它,这个函数如何知道我想测试哪个元素?

any(x > 0 for x in list)
Run Code Online (Sandbox Code Playgroud)

从函数定义中,我只能看到我传递的是一个可迭代对象.for循环如何知道我正在寻找什么> 0

python

97
推荐指数
5
解决办法
14万
查看次数

如何检查列表是否只有一个真值?

在python中,我有一个列表应该只有一个 truthy值(即,bool(value) is True).有没有一种聪明的方法来检查这个?现在,我只是遍历列表并手动检查:

def only1(l)
    true_found = False
    for v in l:
        if v and not true_found:
            true_found=True
        elif v and true_found:
             return False #"Too Many Trues"
    return true_found
Run Code Online (Sandbox Code Playgroud)

这似乎不优雅,不是非常pythonic.有更聪明的方法吗?

python

76
推荐指数
8
解决办法
2万
查看次数

在列表中查找包含未知值的元组结构

说我有元组列表:

list = [(1,5), (1,7), (2,3)]
Run Code Online (Sandbox Code Playgroud)

有没有办法在Python中编写类似的东西

if (1, *) in list: do things
Run Code Online (Sandbox Code Playgroud)

在哪里*意味着" 我不关心这个价值 "?所以我们检查1第一个位置是否有元组,第二个位置是否有值.

据我所知,其他语言中有特殊机制,但我不知道这个特殊问题的名称.那么Python中有类似的行为吗?

PS:我知道我可以在这里使用列表推导.我对这个特殊机制感兴趣.

python tuples list

34
推荐指数
4
解决办法
2829
查看次数

我可以一口气检查一小撮布尔型吗?

有一个类似的问题在这里,但在这一问题的用户似乎有一个更大的阵列,或载体。如果我有:

bool boolArray[4];
Run Code Online (Sandbox Code Playgroud)

我想检查所有元素是否为假,我可以分别检查[0],[1],[2]和[3],也可以循环遍历。由于(据我所知)false应该具有值0,而除0以外的其他任何东西都为true,所以我想到了简单地做:

if ( *(int*) boolArray) { }
Run Code Online (Sandbox Code Playgroud)

这行得通,但是我意识到它依赖于布尔值是一个字节,整数是四个字节。如果我强制转换为(std :: uint32_t)可以,还是一个坏主意?我刚好在一个数组中有3或4个布尔值,并且想知道这是否安全,如果不是,那么是否有更好的方法可以做到。

另外,如果我最终得到超过4个布尔值,但少于8个布尔值,那么我可以使用std :: uint64_t或unsigned long long之类的东西做同样的事情吗?

c++ arrays casting boolean

28
推荐指数
2
解决办法
2625
查看次数

Python中的"all"函数如何工作?

all在Python中搜索了对该函数的理解,我发现了这个,根据这里:

allTrue只有当所有元素都是Truthy时才会返回.

但是当我使用这个函数时,它的表现不同:

'?' == True   # False
'!' == True   # False
all(['?','!']) # True
Run Code Online (Sandbox Code Playgroud)

为什么当输入中的所有元素都False返回时True?我误解了它的功能还是有解释?

python python-3.x

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

为什么“any”和“all”在这里似乎没有使用短路求值?

all()在序列中找到 False 后是否立即返回 False?
尝试运行这段代码:

def return_true():
    print('I have just been printed')
    return True

print(all((False, return_true())))
Run Code Online (Sandbox Code Playgroud)

如您所见,I have just been printed即使前面有 False,也会打印出来。

另一个例子:

def return_false():
    print('I have just been printed')
    return False

print(any((True, return_false())))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,I have just been printed即使之前有 True,也会在此代码中打印。

python

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

标签 统计

python ×9

list ×4

arrays ×1

boolean ×1

c++ ×1

casting ×1

for-loop ×1

numpy ×1

python-3.x ×1

tuples ×1

while-loop ×1