提问人:solub 提问时间:1/22/2020 更新时间:1/22/2020 访问量:538
如何迭代地切片循环列表?(Python 2.7)
How to slice a circular list iteratively ? (Python 2.7)
问:
我正在循环中切片对象列表,但即使使用模索引,似乎也无法使切片环绕该列表的末尾:
N = 4
nums = range(N) # [0, 1, 2, 3]
for i in xrange(N):
print nums[i: (i+2)%N]
指纹:
[0, 1]
[1, 2]
[]
[]
我怎样才能让它返回:
[0, 1]
[1, 2]
[2, 3]
[3, 0]
注意:我使用的是 Python 2.7,无法导入像 numpy 这样的模块
答:
2赞
deceze
1/22/2020
#1
要制作一对“真正的”圆形数字,您应该合并一些迭代工具
:
from itertools import cycle, islice, izip
circ_list = izip(cycle(nums), islice(cycle(nums), 1, None))
这是一个无休止的迭代器,它将不断产生您想要的数字对。
cycle(nums)
会无休止地重复你的数字列表,跳过它的第一项,所以你基本上有 和 ,它结合起来。islice(..., 1, None)
[0, 1, 2, ...]
[1, 2, 3, ...]
izip
例如,您现在可以从中获取一小部分:
>>> list(islice(circ_list, 5))
[(0, 1), (1, 2), (2, 3), (3, 0), (0, 1)]
评论
0赞
solub
1/23/2020
谢谢。到目前为止,这是正确解决切片部分的唯一答案。
0赞
Clément
1/22/2020
#2
或者你可以做:
N = 4
nums = range(N)
for i in xrange(N):
print [nums[i], nums[(i+1)%N]]
[0, 1]
[1, 2]
[2, 3]
[3, 0]
0赞
U13-Forward
1/22/2020
#3
或者尝试使用:
N = 4
nums = xrange(N)
for i in xrange(N):
print (nums[i:(i+2)%(i+N)] + [0] * 2)[:2]
评论
[3, 0]
nums[3::-3]