我一直在努力解决这个问题,我想知道是否有办法解决这个问题。
我希望在Python中使用range(start、to、step)函数,但我想使用与常规功能允许的不同的顺序。据我所知,范围函数可以做三件事:
现在我在寻找以下订单: 0,10,1,9,2,8,3,7等
在本例中,10在len( df )中,所以是df的最后一行。
发布于 2020-12-07 12:04:31
您可以创建一个生成器来实现这个目的:
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
下面是一些例子:
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]
中的数字,只需使用此函数生成索引:
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
或者您可以按混合顺序构建一个新列表:
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]
发布于 2020-12-07 11:53:55
range
只是有start, stop, step
参数。但是,您可以通过将两个范围与chain.from_iterable
函数一起压缩来实现您想要的结果:
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
注意,此解决方案重复值,如果不希望重复值,则应该使用生成器。
发布于 2020-12-07 11:45:54
为了保持简单明了,range函数无法做到这一点。因为它只允许一次增加或减少。
但这可以通过循环和变量来实现。
这就是怎么做的
for i in range(0,11):
print(i,10-i,end=" ")
这段代码就行了。
https://stackoverflow.com/questions/65181091
复制相似问题