标签: iterable

发电机输出长度

Python提供了一种很好的方法来获取渴望迭代的长度,len(x)也就是说.但是我找不到任何类似于生成器理解和函数所代表的惰性迭代.当然,写下这样的东西并不难:

def iterlen(x):
  n = 0
  try:
    while True:
      next(x)
      n += 1
  except StopIteration: pass
  return n
Run Code Online (Sandbox Code Playgroud)

但我无法摆脱我重新实现自行车的感觉.

(当我输入这个函数时,一个想法让我大吃一惊:也许真的没有这样的功能,因为它"摧毁"了它的论点.虽然不是我的情况的问题).

PS:关于第一个答案 - 是的,类似的东西len(list(x))也会起作用,但这会大大增加内存的使用.

PPS:重新检查......无视PS,似乎我在尝试时犯了一个错误,它运行正常.抱歉,添麻烦了.

python iterable generator

117
推荐指数
8
解决办法
6万
查看次数

获取Java中Iterable的大小

我需要弄清楚IterableJava中的元素数量.我知道我可以这样做:

Iterable values = ...
it = values.iterator();
while (it.hasNext()) {
  it.next();
  sum++;
}
Run Code Online (Sandbox Code Playgroud)

我也可以这样做,因为我不再需要Iterable中的对象:

it = values.iterator();
while (it.hasNext()) {
  it.remove();
  sum++;
}
Run Code Online (Sandbox Code Playgroud)

一个小规模的基准测试没有表现出太大的性能差异,这个问题的任何评论或其他想法?

java iterable

75
推荐指数
5
解决办法
9万
查看次数

在for循环中使用对象

为什么不能在for循环中使用对象?或者这是一个浏览器错误?此代码在Chrome 42中不起作用,称undefined不是函数:

test = { first: "one"}

for(var item of test) {
  console.log(item)
}
Run Code Online (Sandbox Code Playgroud)

javascript for-loop iterable ecmascript-6

73
推荐指数
6
解决办法
7万
查看次数

Kotlin的Iterable和Sequence看起来完全一样.为什么需要两种类型?

这两个接口都只定义了一种方法

public operator fun iterator(): Iterator<T>
Run Code Online (Sandbox Code Playgroud)

文档说Sequence是懒惰的.但是也不是Iterable懒惰(除非由a支持Collection)?

iterable lazy-sequences kotlin

71
推荐指数
2
解决办法
9329
查看次数

将ES6 Iterable转换为Array

假设你有一个类似数组的Javascript ES6 Iterable,你事先知道它的长度是有限的,将它转换为Javascript数组的最佳方法是什么?

这样做的原因是许多js库(如下划线和lodash)仅支持Arrays,因此如果您希望在Iterable上使用它们的任何函数,则必须首先将其转换为Array.

在python中,您可以使用list()函数.在ES6中是否有相同的东西?

javascript arrays iterable ecmascript-6 babeljs

70
推荐指数
3
解决办法
4万
查看次数

为什么Java不允许在迭代器上使用foreach(仅在迭代器上)?

可能重复:
为什么Java的迭代器不是Iterable?

在给定迭代器的情况下使用for-each循环的惯用方法?

我们可以使用for-each循环来迭代Iterator类型的对象吗?

据我所知,foreach循环是Java 5中添加的语法糖.所以

Iterable<O> iterable;
for(O o : iterable) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

将基本上产生相同的字节码

Iterable<O> iterable;
for(Iterator<O> iter = iterable.iterator(); iter.hasNext(); /* NOOP */) {
    O o = iter.next();
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我首先没有迭代,但只有一个迭代器(比如,因为一个类提供了两个不同的迭代器),我不能使用语法sugar foreach循环.显然我仍然可以做普通的旧式迭代.但是,我其实想做:

Iterator<O> iter;
for(O o : iter /* Iterator<O>, not Iterable<O>! */) {
     // Do something
}
Run Code Online (Sandbox Code Playgroud)

当然我可以做假的Iterable:

class Adapter<O> implements Iterable<O> {
    Iterator<O> iter;

    public Adapter(Iterator<O> iter) {
        this.iter = iter;
    }

    @Override
    public Iterator<O> iterator() {
        return iter; …
Run Code Online (Sandbox Code Playgroud)

java syntax iterator iterable language-design

68
推荐指数
4
解决办法
7万
查看次数

与any()函数相反

Python的内置功能any(iterable)可以帮助快速检查是否有bool(element)True一个迭代的类型.

>>> l = [None, False, 0]
>>> any(l)
False
>>> l = [None, 1, 0]
>>> any(l)
True
Run Code Online (Sandbox Code Playgroud)

但是Python中有一种优雅的方式或功能可以达到相反的效果any(iterable)吗?也就是说,如果有的bool(element) is False话返回True,如下例所示:

>>> l = [True, False, True]
>>> any_false(l)
>>> True
Run Code Online (Sandbox Code Playgroud)

python iterable python-3.x

67
推荐指数
4
解决办法
1万
查看次数

为什么枚举不可以进行?

在Java 5及更高版本中,你有foreach循环,它可以在任何实现的东西上神奇地工作Iterable:

for (Object o : list) {
  doStuff(o);
}
Run Code Online (Sandbox Code Playgroud)

但是,Enumerable仍然没有实现Iterable,这意味着迭代Enumeration你必须执行以下操作:

for(; e.hasMoreElements() ;) {
  doStuff(e.nextElement());
}
Run Code Online (Sandbox Code Playgroud)

有谁知道有没有理由Enumeration仍然没有实现Iterable

编辑:作为澄清,我不是在谈论枚举的语言概念,我在谈论Java API中称为" 枚举 " 的特定于Java的类.

java enumeration iterable

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

Unittest的assertEqual和iterables - 只检查内容

在unittest中是否有一个"体面"的方法来检查两个可迭代对象的内容是否相等?我使用了很多元组,列表和numpy数组,我通常只想测试内容而不是类型.目前我只是在铸造这种类型:

self.assertEqual (tuple (self.numpy_data), tuple (self.reference_list))
Run Code Online (Sandbox Code Playgroud)

我刚才用这个列表理解:

[self.assertEqual (*x) for x in zip(self.numpy_data, self.reference_list)]
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案看起来有点不如类型转换,因为它只会在单个值失败时打印单个值,并且对于不同长度的引用和数据也不会失败(由于zip函数).

python unit-testing assert iterable

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

计算生成器/迭代器中项目数的最短方法是什么?

如果我想要迭代中的项目数量而不关心元素本身,那么获得该元素的pythonic方法是什么?现在,我会定义

def ilen(it):
    return sum(itertools.imap(lambda _: 1, it))    # or just map in Python 3
Run Code Online (Sandbox Code Playgroud)

但我明白lambda接近被认为是有害的,lambda _: 1当然不是很漂亮.

(这个用例是计算匹配正则表达式的文本文件中的行数,即grep -c.)

python iterator iterable generator

60
推荐指数
5
解决办法
3万
查看次数