Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用自定义计数器在列表中循环_Python - Fatal编程技术网

Python 使用自定义计数器在列表中循环

Python 使用自定义计数器在列表中循环,python,Python,我有一个名为dirs的目录列表 我还有一个名为snake的自定义计数器函数,它使用以下语法 snake(low, high, x) 其用法的一个例子是 [snake(1,3,x) for x in range(8)] [1, 2, 3, 3, 2, 1, 1, 2] dirs包含多个相同的目录。比如说 [/my/path/one/, /my/path/one/, /my/path/one/, /my/path/one/, /my/path/two/, /my/path/two/, /m

我有一个名为
dirs
的目录列表

我还有一个名为
snake
的自定义计数器函数,它使用以下语法

snake(low, high, x) 
其用法的一个例子是

[snake(1,3,x) for x in range(8)]
[1, 2, 3, 3, 2, 1, 1, 2]
dirs
包含多个相同的目录。比如说

[/my/path/one/, /my/path/one/, /my/path/one/, /my/path/one/, 
 /my/path/two/, /my/path/two/, /my/path/two/]
我想使用snake创建一个变量,其中包含一组与
dirs
关联的索引,当列表中遇到新的目录名时,snake模式将重置。比如:

ind = [1, 2, 3, 3, 1, 2, 3] 
如何实现这一点?

在纯python中:

def snake(low, high):
    return itertools.cycle(itertools.chain(
        range(low, high + 1),
        range(high, low - 1, -1)))
用法:

>>> list(itertools.islice(snake(1, 3), 8))
[1, 2, 3, 3, 2, 1, 1, 2]
现在,让我们编写一条害羞的蛇,当它遇到新项目时,它会惊慌失措并重置生成器:

def shy_snake(low, high, iterable):
    """d-d-doesss s-s-sssenpai noticesss me?"""
    prev = None
    for x in iterable:
        if x != prev:
            prev = x
            snake_it = snake(low, high)
        yield next(snake_it)
实际上,我们可以更一般地编写此代码,以使用任何序列生成器:

def shy(seq_func, iterable):
    prev = None
    for x in iterable:
        if x != prev:
            prev = x
            it = seq_func()
        yield next(it)

def shy_snake(low, high, iterable):
    """d-d-doesss s-s-sssenpai noticesss me?"""
    return shy(lambda: snake(low, high), iterable)
测试:

>>> dirs = [1, 1, 1, 1, 2, 2, 2]
>>> list(shy_snake(1, 3, dirs))
[1, 2, 3, 3, 1, 2, 3]

非常有趣。。。如何将
dirs
中的
字符串列表
转换为
shy\u snake
所需的
iterable
?这是
的优点=
运算符是指它同时适用于整数和字符串。:)您可以直接将
dirs
插入其中。酷。。我需要玩这个,让我的思想围绕它。这比我以前使用的更数学的
snake
函数要简单得多。。。我刚刚意识到我的应用程序仅限于python2.7,因为我需要使用Jython.Itertools和snake中的星形表达式