标签: iterator

避免在 Python Generator 中使用多个 Next() 语句

我正在使用一个返回生成器的库。有没有办法在不使用多个next()语句的情况从特定迭代开始?

在一个简单的 for 循环中,我可以执行以下操作。

array = [2, 5, 1, 4, 3]

for i in array [2:]:
    # do something
Run Code Online (Sandbox Code Playgroud)

在发电机中,我不能做如上所示。相反,我必须使用多个next ()语句从第三个索引开始。尝试执行与 for 循环相同的操作时,我收到一条错误消息,指出“生成器不可编写脚本”。

python iteration iterator yield generator

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

LinkedList - 使用迭代器“get()”来更快地迭代

我正在读这本书:Data Structures and Algorithm Analysis in Java by Mark Weiss。有人可以解释一下使用迭代器如何在调用get(i)?

书中的文字片段:

在此处输入图片说明

在此处输入图片说明

java collections iterator linked-list

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

swift 中的 iterator.element 是什么?

我只是在遵循迭代器模式,你能告诉我S.Iterator.Element下面的代码是什么意思 Int where Turn == S.Iterator.Element吗?

 func computeScoreIncrement<S : Sequence>(_ pastTurnsReversed: S) -> Int where Turn == S.Iterator.Element {
    var scoreIncrement: Int?
    for turn in pastTurnsReversed {
      if scoreIncrement == nil {
        scoreIncrement = turn.matched! ? 1 : -1
        break
      }
    }
//Turn is class name & nextScorer is protocol instance.
    return (scoreIncrement ?? 0) + (nextScorer?.computeScoreIncrement(pastTurnsReversed) ?? 0)
  }
Run Code Online (Sandbox Code Playgroud)

iterator swift

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

C# yield return enumerator,从中途继续

我正在使用 yield return 来处理一些数据,其中包含一组不确定的迭代。我想开始处理,但是一旦满足条件(例如字节大小)就从循环中断,将枚举数传递给将继续处理的新线程,然后返回到目前为止处理的结果。

实际上,我有一个 foreach 循环,我可能会在结束之前突破它。如何将 IEnumerable 传递给一个新线程并从我离开的地方而不是从头开始“继续”?

public static IEnumerable<String> Process()
{
    // static values added for simplicity, but will be a variable number of returns
    yield return "1";
    yield return "2";
    yield return "3";
    yield return "4";
    yield return "5";
    yield return "6";    
}

List<String> main()
{
    List<String> retVal = new List<String>();
    IEnumerable<String> strList = Process();

    foreach(String strItem in strList)
    {
        retVal.Add(strItem);
        Console.WriteLine(strItem);
        // Time to send something back and continue in a new thread
        if (strItem.Equals("3")) …
Run Code Online (Sandbox Code Playgroud)

c# iterator yield enumerable enumerator

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

用随机值初始化二维向量

我正在尝试用随机数初始化一个双向量数组(确实是一个矩阵),但我一定有什么问题,而且我无法在这里或在谷歌中找到解决方案。

我有下一个“标准”定义,它用 0 初始化我的矩阵:

情况1:

 int num_rows=5, num_cols=7;
 std::vector<std::vector<int>> Matrix(num_rows, std::vector<int>(num_cols, 0));
Run Code Online (Sandbox Code Playgroud)

所以如果我做这样的事情:

案例二

      std::vector<std::vector<int>> Matrix(num_rows, std::vector<int>(num_cols, rand()%100));
Run Code Online (Sandbox Code Playgroud)

我看到的是它rand()%100被调用一次,所以如果它返回,34那么我的所有矩阵都将填充该数字。

在这一点上,我尝试使用Case 1初始化和 double for 迭代器:

for ( std::vector<std::vector<int>>::iterator it1 = Matrix.begin(); it1 != Matrix.end(); ++it1 )
{
    for ( std::vector<int>::iterator it2 = (*it1).begin(); it2 != (*it1).end(); ++ it2 )
    {
        std::cout << (*it2) << "\n"; //With that I can see every value on the matrix... right now all 0 

    }
}
Run Code Online (Sandbox Code Playgroud)

现在在那个循环中,我找不到逐项执行并为它们分配新值的方法。我很抱歉,因为我有良心,这是一个非常简单的问题,但在谷歌上找不到......

由于 it2 是我必须使用的 …

c++ iterator vector stdvector

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

如何在Python中并行遍历两个长度不同的列表?

我有两个清单:

list1=[1,2,3]
list2=[4,5,6,7]
Run Code Online (Sandbox Code Playgroud)

我想迭代它们。我想获得的是类似的东西:

1,4
2,5
3,6
 ,7
Run Code Online (Sandbox Code Playgroud)

我曾想过使用该zip函数,但它似乎不适用于不同长度的列表,如使用以下代码:

for l1, l2 in list1, list2:
     print(l1,l2)
Run Code Online (Sandbox Code Playgroud)

我明白了:

1,4
2,5
3,6
Run Code Online (Sandbox Code Playgroud)

所以数字 7 不见了。我想知道如何调整代码,或者当列表的长度不同时,我是否缺少任何其他选项来并行迭代?

python iterator for-loop list

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

在 std::map 中替换现有条目并添加新条目

考虑以下片段:

MapT map;

map["A"] = 1;
map["B"] = 2;
map["C"] = 3;
map["D"] = 4;
map["E"] = 5;

MapT mapSecond;

mapSecond["A"] = 10;
mapSecond["B"] = 20;
mapSecond["C"] = 30;
mapSecond["X"] = 4;
mapSecond["Y"] = 5;

MapT::const_iterator itSecond = mapSecond.begin();
MapT::iterator it = map.begin();

for (; itSecond != mapSecond.end(); ++itSecond)
{
    std::pair<MapT::iterator, bool> pair = map.insert(std::make_pair(itSecond->first, itSecond->second));
    if (!pair.second)
    {
        pair.first->second = itSecond->second;
    }
}

for (; it != map.end(); ++it)
{
    std::cout << it->first << " " << it->second << …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl stdmap

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

使用迭代器从 std::string 中获取子字符串

我想从字符串中 char 的第一次出现到字符串末尾获取一个子字符串。我以为我可以只使用构造函数,就像在这个问题中一样,但它并没有真正起作用。当我这样做时:

string(input.find(' ')+1, input.end()-1)
Run Code Online (Sandbox Code Playgroud)

我面临“无构造函数”错误

error: no matching constructor for initialization of 'std::__cxx11::string' (aka 'basic_string<char>')
Run Code Online (Sandbox Code Playgroud)

如何解决此问题并使我的代码正常工作?

c++ string iterator std

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

尽管我的函数已被调用,但编译器不输出任何内容

我正在尝试创建一个程序来计算一个字母在字符串中的次数,但是下面的程序没有输出任何内容,尽管该函数count()确实被调用了。

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int count(const string &s, char c) {
    string::const_iterator i = find(s.begin(), s.end(), c);
    int n = 0;
    while (i != s.end()) {
        ++n;
        i = find(i+1, s.end(), c);
    }
    return n;
}

int main() {
    const string e = "dddddddd";
    char d = 'd';
    count(e, d);
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator

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

是否可以在 map 中使用 while 或任意迭代器?

i = 0

while i < 10 do
  i += 1
end
Run Code Online (Sandbox Code Playgroud)

有没有办法让它发出值 [1..10]?

例如:

ary = while (i < 10).map do
Run Code Online (Sandbox Code Playgroud)

ruby iterator

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