在类 C 语言中,可以在声明中定义变量的更改for,然后在循环本身中更改其值。C++11 中的示例:
std::vector<int> a = {1,2,3,3,3,4,5};
auto next=a.begin(); next++;
for(auto i=a.begin();i!=a.end();i++, next++){
while (next != a.end() && *i == *next) {
i++;
next++;
}
std::cout << *i<<std::endl;
}
如何通过tuple, string etcPython 中的元素实现相同的运动?
因为唯一能想到的就是:
a = "Python is cool"
prev = ""
for elem in a:
if elem == prev:
continue
print(elem)
prev = elem
要删除连续的重复项,您可以
itertools.groupby()使用:例子:
仅留下附近重复元素的第一次出现。它通常写成:
结果是一样的。另请参阅
unique_justseen()itertools 的配方以支持任意比较键。要手动执行此操作:
用法与前面的选项完全相同。请注意,该索引并未在任何地方明确使用。此选项类似于问题中的 Python 代码(也适用于元组、字符串等)。
如果您想在不使用
for-loop 的情况下实现:也有效。
*next++这里的 C++ 对应物是next(iterator).这是一个完全非惯用的 Python 代码,它尝试逐行重复 C++ 代码的紧密形式,以表明可以进行 for 循环并
next()匹配相同的迭代器(这里通常这是一个坏主意):进行测试,看看您是否可以理解使用 tee()、zip()、next() 的解决方案在根据某些规则从其他列表中形成嵌套列表中的工作原理?
更改定义循环体内循环条件的变量是不好的编程风格。
Python 标榜自己是“一门干净漂亮的编程语言”,但它不能让你轻松地做这些事情。
forPython 不像其他语言那样给你对循环的控制。通常,它
for专门用于迭代可迭代的数据结构(列表、生成器等)。在这种情况下,您将不得不使用循环
while。所以有可能: