Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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,假设我有一张清单: my_array = np.array([0, 5, 12, 18, 23]) 我想在上述列表的连续对之间生成一个范围的列表,即: [range(0,5), range(5,12), range(12, 18), range(18, 23)] 有没有一个简单的方法来建立这些范围?也许是一种更具python风格的方法,它不需要显式循环?您可以使用and 使用一个有用的函数从iterable返回两两元素,这相当简单 import numpy as np from itert

假设我有一张清单:

my_array = np.array([0, 5, 12, 18, 23])
我想在上述列表的连续对之间生成一个范围的列表,即:

[range(0,5), range(5,12), range(12, 18), range(18, 23)]
有没有一个简单的方法来建立这些范围?也许是一种更具python风格的方法,它不需要显式循环?

您可以使用and


使用一个有用的函数从iterable返回两两元素,这相当简单

import numpy as np 
from itertools import islice, tee

def pairwise(iterable, n=2):
    return zip(*(islice(it, pos, None) for pos, it in enumerate(tee(iterable, n))))

my_array = np.array([0, 5, 12, 18, 23])

myranges = [range(i,j) for i,j in pairwise(my_array)]

print(myranges)
#[range(0, 5), range(5, 12), range(12, 18), range(18, 23)]
那么:

Python 2变体: Python 3变体: 与Python 3一样,
map
range
和许多其他函数不返回列表,而是返回迭代器,我们可能需要修改调用以获取列表:

>>> list(map(list, map(range, lst[:-1], lst[1:])))
[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11], [12, 13, 14]]
但是,如果您对范围迭代器列表很满意:

>>> list(map(range, lst[:-1], lst[1:]))
[range(0, 5), range(5, 12), range(12, 15)
Python 2样式返回类型为
map
的实例,这与迭代器非常接近:

>>> map(range, lst[:-1], lst[1:])
<map at 0x7faa5b15c6d8>

请注意,这在Python3中的行为与Python2演示中显示的稍有不同。它可能仍能满足提问者的需求,但会有所不同。在Python3中,
map
是一个生成器,
range
返回一个iterable对象而不是列表。
>>> list(map(range, lst[:-1], lst[1:]))
[range(0, 5), range(5, 12), range(12, 15)
>>> map(range, lst[:-1], lst[1:])
<map at 0x7faa5b15c6d8>
>>> for itm in map(range, lst[:-1], lst[1:]):
       print (itm)
range(0, 5)
range(5, 12)
range(12, 15)