首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在range函数Python中使用自定义顺序

在range函数Python中使用自定义顺序
EN

Stack Overflow用户
提问于 2020-12-07 11:41:11
回答 3查看 629关注 0票数 2

我一直在努力解决这个问题,我想知道是否有办法解决这个问题。

我希望在Python中使用range(start、to、step)函数,但我想使用与常规功能允许的不同的顺序。据我所知,范围函数可以做三件事:

  1. 0、1、2、3等
  2. 10、9、8、7等
  3. 2、4、6、8等

现在我在寻找以下订单: 0,10,1,9,2,8,3,7等

在本例中,10在len( df )中,所以是df的最后一行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-07 12:04:31

您可以创建一个生成器来实现这个目的:

代码语言:javascript
运行
复制
def my_range(n):
    """Yields numbers from 0 to n, in order 0, n, 1, n-1..."""
    low = 0
    high = n
    while low <= high:
        yield low
        if high != low:
            yield high
        low += 1
        high -= 1

下面是一些例子:

代码语言:javascript
运行
复制
print(list(my_range(10)))
# [0, 10, 1, 9, 2, 8, 3, 7, 4, 6, 5]

for i in my_range(5):
    print(i)
    
0
5
1
4
2
3

这将提供间隔中的每一个数字,完全是一次,而且是懒惰的,就像range一样。

要回答您的评论中的问题:

如果要混合your_list = [1,3,4,5,7,9,10,12,13,14]中的数字,只需使用此函数生成索引:

代码语言:javascript
运行
复制
your_list = [1,3,4,5,7,9,10,12,13,14]
for index in my_range(len(your_list)-1):
    print(your_list[index], end=' ')

# 1 14 3 13 4 12 5 10 7 9 

或者您可以按混合顺序构建一个新列表:

代码语言:javascript
运行
复制
new = [your_list[index] for index in my_range(len(your_list)-1)]
print(new)
# [1, 14, 3, 13, 4, 12, 5, 10, 7, 9]
票数 3
EN

Stack Overflow用户

发布于 2020-12-07 11:53:55

range只是有start, stop, step参数。但是,您可以通过将两个范围与chain.from_iterable函数一起压缩来实现您想要的结果:

代码语言:javascript
运行
复制
from itertools import chain

for val in chain.from_iterable(zip(range(11), range(10, -1, -1))):
    print(val)

# 0 10 1 9 2 8 3 7 4 6 5 5 6 4 7 3 8 2 9 1 10 0

注意,此解决方案重复值,如果不希望重复值,则应该使用生成器。

票数 2
EN

Stack Overflow用户

发布于 2020-12-07 11:45:54

为了保持简单明了,range函数无法做到这一点。因为它只允许一次增加或减少。

但这可以通过循环和变量来实现。

这就是怎么做的

代码语言:javascript
运行
复制
for i in range(0,11):
    print(i,10-i,end=" ")

这段代码就行了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65181091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档