javascript

java

python

c#

android

c++

node.js

php

reactjs

jquery

html

css

ios

.net

git

ruby-on-rails

sql

c

string

ruby

如何在python中找到“过滤器”对象的长度

>>> n = [1,2,3,4]

>>> filter(lambda x:x>3,n)
<filter object at 0x0000000002FDBBA8>

>>> len(filter(lambda x:x>3,n))
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    len(filter(lambda x:x>3,n))
TypeError: object of type 'filter' has no len()

我无法获得清单的长度。 所以我尝试将其保存到这样的变量中...

>>> l = filter(lambda x:x>3,n)
>>> len(l)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    len(l)
TypeError: object of type 'filter' has no len()

除了使用循环之外,还有什么方法可以获取此长度?

trans by 2020-06-30T04:46:20Z

为什么变长数组不是C ++标准的一部分?

在过去的几年里,我并没有非常使用过C语言。 当我今天读到这个问题时,我遇到了一些我不熟悉的C语法。

显然在C99中,以下语法有效:

void foo(int n) {
    int values[n]; //Declare a variable length array
}

这似乎是一个非常有用的功能。 有没有关于将它添加到C ++标准的讨论,如果是这样,为什么它被省略?

一些潜在的原因:

  • 毛茸茸的编译器供应商实现
  • 与标准的其他部分不兼容
  • 可以使用其他C ++构造模拟功能

C ++标准规定数组大小必须是常量表达式(8.3.4.1)。

是的,当然我意识到在玩具示例中可以使用comp.std.c++,但这会从堆中分配内存而不是堆栈。 如果我想要一个多维数组,如:

void foo(int x, int y, int z) {
    int values[x][y][z]; // Declare a variable length array
}

comp.std.c++版本变得非常笨拙:

void foo(int x, int y, int z) {
    vector< vector< vector<int> > > values( /* Really painful expression here. */);
}

切片,行和列也可能遍布整个内存。

看一下comp.std.c++的讨论,显然这个问题在争论的两边都有一些非常重量级的名字引起争议。 std::vector始终是一个更好的解决方案,这当然不是很明显。

trans by 2019-02-06T17:44:15Z

1 共1页