标签: iterable

Python __iter__和for循环

据我所知,我可以使用返回迭代器for__iter__方法在对象上使用循环构造.我有一个对象,我实现了以下__getattribute__方法:

def __getattribute__(self,name):
    if name in ["read","readlines","readline","seek","__iter__","closed","fileno","flush","mode","tell","truncate","write","writelines","xreadlines"]:
        return getattr(self.file,name)
    return object.__getattribute__(self,name)
Run Code Online (Sandbox Code Playgroud)

我有这个类的对象,a发生以下情况:

>>> hasattr(a,"__iter__")
True
>>> for l in a: print l
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'TmpFile' object is not iterable
>>> for l in a.file: print l
...
>>>
Run Code Online (Sandbox Code Playgroud)

所以python看到a有一个__iter__方法,但不认为它是可迭代的.我做错了什么?这是python 2.6.4.

python for-loop iterable

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

在python循环中匹配整数

在下面的示例代码中,我想要生成一个指示,表明预定义的数字列表是否与我正在循环的迭代匹配或不匹配.这是我的问题的简化示例.

不幸的是,我的代码不符合我的期望,可能我错过了一些简单的东西.在我的实际应用中,这是通过具有不同输出的极大的一维阵列来完成的,但是这以简单的文本方式展示了它,易于重现.

也许我还应该补充说我正在使用Python 2.7.5.

match = [1, 3, 4]
volumes=10

def vector_covariates(match, volumes):
    for i in range(volumes):
        if i == match:
            print "[*]"
        else:
            print "[ ]" 

vector_covariates(match, volumes)
Run Code Online (Sandbox Code Playgroud)

运行时,输出:

 [ ]
 [ ]
 [ ]
 [ ]
 [ ]
 [ ]
 [ ]
 [ ]
 [ ]
 [ ] 
Run Code Online (Sandbox Code Playgroud)

而"正确"的输出应该是

 [*]
 [ ]
 [*]
 [*]
 [ ]
 [ ]
 [ ]
 [ ]
 [ ]
 [ ]
Run Code Online (Sandbox Code Playgroud)

python loops iterable python-2.7

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

数组数组作为可迭代对象的可迭代对象

让我们考虑以下定义,以将 Int 的嵌套 Iterable 结构中的所有元素相加:

def add(xss : Iterable[Iterable[Int]]) : Int = xss.map(_.sum).sum
Run Code Online (Sandbox Code Playgroud)

但是,计算以下表达式会产生类型错误:

   scala> add(Array(Array(1,2,3)))
   <console>:9: error: type mismatch;
   found   : Array[Array[Int]]
   required: Iterable[Iterable[Int]]
                add(Array(Array(1,2,3)))
                         ^
Run Code Online (Sandbox Code Playgroud)

该函数与其他可迭代对象(如列表)一起按预期工作。我怎样才能避免这个错误?这样做的理由是什么?猜测这与 Java 原生的数组有关,但不知道这种情况下的具体细节。

谢谢

arrays iterable scala

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

遍历 string-&gt;string dict 只给出每个字符的第一个字符

我有一个dict如下:

values  = {'A1' : '123456', 'B1' : 123456, ....}
Run Code Online (Sandbox Code Playgroud)

我知道迭代的正确方法是:

for key, value in values.items():
   #do what you want 
Run Code Online (Sandbox Code Playgroud)

错误,我忘记添加.items(),所以我开始变得奇怪KeyError

我尝试打印,但它只获取每个字符串的第一个字符并将其分配给keyvalue

我的问题是:为什么 python 这样做?幕后发生了什么?

python iterator iterable

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

java - 如何以懒惰的方式连接Java中的两个集合?

我有两个集合,我想返回一个 IEnumerable,它是它们的串联。返回的枚举应该是惰性的,不应该修改两个初始集合(所以,我不想将两个集合复制为一个然后返回结果,因为那不是惰性的)

下面的代码是我想用 Java 实现但用 c# 编写的示例:

public static IEnumerable<int> all()
{
    List<int> list1 = new List<int>() { 1, 2, 3 };
    List<int> list2 = new List<int>() { 4, 5, 6 };
    return list1.Concat(list2);
}
Run Code Online (Sandbox Code Playgroud)

java iterable lazy-loading enumerable

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

在角度/打字稿中将类创建为 Iterable

我已经在 angular 中创建了一个类,现在当我通过商店订阅获取一个对象时,虽然它返回一个对象数组,但我不能在返回的对象上使用 forEach 循环。

是的,我使用了Object.keys(user).forEach(){..}它正在工作,但我想通过使类 Iterable 来做同样的事情。如何做到这一点。

示例代码:-

class user {
    ...
}
ngOnInit(){
    storeSubsc = this.store.select('users').subscribe(user => {
        this.user = user;
    });
}

login(){
    Object.keys(this.user).forEach()... --> working fine
    I want it like
    this.user.forEach() {... }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢...

iterable typescript angular

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

容器总是可迭代的吗?

在此处输入图片说明

根据此图,是否存在容器不可迭代的情况?

python containers iterable

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

Dart 的 List 的“some”方法叫什么?检查是否至少有一个元素通过测试的方法

在 JavaScript 数组上,有以下some方法:

some()方法测试数组中是否至少有一个元素通过了提供的函数实现的测试。它返回一个布尔值。

我认为 Dart 列表上也必须有类似的方法,但我似乎无法在互联网或文档中的任何地方找到它List

我习惯了 Dart 的一些方法有不同的名称,所以我总是花大约 5 分钟,直到我记得 JavaScript 的find被调用where,等等。但是,我似乎找不到some的等效项。

iterable list dart flutter

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

什么 AsyncGenerator TypeScript 类型会产生 Promise?

我正在尝试为下面的函数分配一个返回类型:

async function *sleepyNumbers() {  // what TypeScript type is this?
  let n = 0;
  while (true) {
    yield new Promise(resolve => resolve(n++));
    await new Promise(resolve => setTimeout(resolve, 500));
  }
}

(async () => {
  for await (const i of sleepyNumbers())
    console.log(i);
})();
Run Code Online (Sandbox Code Playgroud)

生成器正在生成一个解析为number. 将类型设置为Promise<number>失败并显示以下错误消息:

TS2739:“AsyncGenerator”类型缺少“Promise”类型中的以下属性:然后,捕获,[Symbol.toStringTag],最后

Iterable 导致了类似的错误。

我可以将类型设置为,AsyncGenerator但这还不够具体。此函数的返回类型的正确 TypeScript 语法是什么?

iterable generator typescript

3
推荐指数
2
解决办法
2849
查看次数

如何在 Dart (Flutter) 中获取每个可迭代值的索引号

我需要的索引的forEach,因为我想更新我的数据表可迭代的值。但是为了更新数据表,我需要列 ID。这就是为什么我想要每个值的索引号并将其分配给 > i。有类似的问题解释了如何获取可迭代的索引。但就我而言,我无法映射CallLogEntry,这就是为什么我无法获得此可迭代值的索引的原因。

Future callLogDB() async {
    Iterable<CallLogEntry> cLog = await CallLog.get();
    final dbHelper = DatabaseHelper.instance;
    int i = 0;
    cLog.forEach((log) async {
      i++;
      // row to insert
      Map<String, dynamic> row = {
        //DatabaseHelper.columnId: 2,
        DatabaseHelper.columnName: '${log.name}',
        DatabaseHelper.columnNumber: '${log.number}',
        DatabaseHelper.columnType: '${log.callType}',
        DatabaseHelper.columnDate:
            '${DateTime.fromMillisecondsSinceEpoch(log.timestamp)}',
        DatabaseHelper.columnDuration: '${log.duration}'
      };
      await dbHelper.insert(row);
      print('CallLog $i:: $row');
    });
    return cLog;
  }
Run Code Online (Sandbox Code Playgroud)

database foreach iterable dart flutter

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