说我有一长串:
>>> import string
>>> my_list = list(string.ascii_lowercase)
>>> my_list
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
我想遍历此列表,并按顺序重复选择n个项目.例如.如果我要选择5个项目,则应为:
step 1: ['a', 'b', 'c', 'd', 'e']
step 2: ['f', 'g', 'h', 'i', 'j']
step 3: ['k', 'l', 'm', 'n', 'o']
step 4: ['p', 'q', 'r', 's', 't']
step 5: ['u', 'v', 'w', 'x', 'y']
step 6: ['z', 'a', 'b', 'c', 'd']
step 7: ['e', 'f', 'g', 'h', 'i']
......
因此,重点是:我想确保当我到达列表的最后一项时,可以将第一项追加到最后一项,并且循环将继续进行.
为了将第一个项目附加到最后一个项目,我尝试了以下方法:
def loop_slicing(lst_, i):
""" Slice iterable repeatedly """
if i[0] > i[1]:
return [n for n in lst_[i[0]:]+lst_[:i[1]]]
else:
return lst_[i[0]:i[1]]
当我调用此函数时,可以执行以下操作:
>>> loop_slicing(my_list, (0, 5))
['a', 'b', 'c', 'd', 'e']
>>> loop_slicing(my_list, (25, 4))
['z', 'a', 'b', 'c', 'd']
我可以在其中生成一个生成器,该生成器可以生成range(0,26)中的5个连续数字,以遍历my_list并每次获取5个项目.
我不知道这是否是最好的方法.那么,有没有更有效的方法来做这些事情?