RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 716998
Accepted
koshachok
koshachok
Asked:2020-09-11 19:46:04 +0000 UTC2020-09-11 19:46:04 +0000 UTC 2020-09-11 19:46:04 +0000 UTC

在 for 中移动元素。如何在 Python 中实现 *next++

  • 772

在类 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
c++
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    jfs
    2020-09-12T00:54:49Z2020-09-12T00:54:49Z

    要删除连续的重复项,您可以itertools.groupby()使用:

    from itertools import groupby
    
    def uniq_adjacent(iterable):
        return (first for first, same_adjacent_items in groupby(iterable))
    

    例子:

    >>> numbers =  1, 2, 3, 3, 3, 4, 5
    >>> print(*uniq_adjacent(numbers))
    1 2 3 4 5
    

    仅留下附近重复元素的第一次出现。它通常写成:

    from operator import itemgetter
    
    def uniq_adjacent(iterable):
        return map(itemgetter(0), groupby(iterable))
    

    结果是一样的。另请参阅unique_justseen()itertools 的配方以支持任意比较键。

    要手动执行此操作:

    def uniq_adjacent(iterable):
        last = object()
        for item in iterable:
            if item != last:
                yield item
                last = item
    

    用法与前面的选项完全相同。请注意,该索引并未在任何地方明确使用。此选项类似于问题中的 Python 代码(也适用于元组、字符串等)。

    如果您想在不使用for-loop 的情况下实现:

    class uniq_adjacent:
        def __init__(self, iterable):
            self.it = iter(iterable)
            self.last = self.current = object()
    
        def __iter__(self):
            return self
    
        def __next__(self):
            while self.last == self.current:
                self.current = next(self.it)  # exit on StopIteration
            self.last = self.current
            return self.current
    

    也有效。*next++这里的 C++ 对应物是next(iterator).

    这是一个完全非惯用的 Python 代码,它尝试逐行重复 C++ 代码的紧密形式,以表明可以进行 for 循环并next()匹配相同的迭代器(这里通常这是一个坏主意):

    from itertools import tee, zip_longest
    
    def uniq_adjacent_do_not_use(iterable, sentinel=object()):
        # XXX DO NOT USE 
        a, b = tee(iterable)
        next(b, None)
        for x, y in zip_longest(a, b, fillvalue=sentinel):  # iterate pairwise
            while x == y:
                x = next(a)
                y = next(b, sentinel)
            yield x
    

    进行测试,看看您是否可以理解使用 tee()、zip()、next() 的解决方案在根据某些规则从其他列表中形成嵌套列表中的工作原理?

    • 4
  2. comonadd
    2020-09-11T21:46:00Z2020-09-11T21:46:00Z

    更改定义循环体内循环条件的变量是不好的编程风格。

    Python 标榜自己是“一门干净漂亮的编程语言”,但它不能让你轻松地做这些事情。forPython 不像其他语言那样给你对循环的控制。

    通常,它for专门用于迭代可迭代的数据结构(列表、生成器等)。

    在这种情况下,您将不得不使用循环while。

    • 0
  3. Andrio Skur
    2020-09-11T21:59:37Z2020-09-11T21:59:37Z

    所以有可能:

    it = iter(range(0, 10))
    for elem in it:
        print('for[0]: ', elem)
        if elem == 1:
            for elem1 in it:
                print('for[1]: ', elem1)
                if elem1 == 6:
                    break
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5