我在示例li = [1,2,3,4,5,6,7,8]
中有一个列表
现在我想要切片列表示例:
li[1:4]
将[2,3,4]
现在我想要列表的其他部分,即[5,6,7,8,1]
所以我怎么能蟒蛇化。
答案 0 :(得分:4)
只需将第一个元素添加到从索引4到结尾的剩余元素的末尾
l1 = li[1:4]
l2 = li[4:] + [li[0]]
In [22]: li = [1,2,3,4,5,6,7,8]
In [23]: l1 = li[1:4]
In [24]: l2 = li[4:]+ [li[0]]
In [25]: l1
Out[25]: [2, 3, 4]
In [26]: l2
Out[26]: [5, 6, 7, 8, 1]
使用extend
分两步:
l2 = li[4:]
In [30]: l2.extend([li[0]])
Out[31]: [5, 6, 7, 8, 1]
答案 1 :(得分:3)
最简单(不是最有效)的方法是两次使用相同的列表并从中切片:
def circ_slice(a, start, length):
return (a * 2)[start:start+length]
a = [0, 1,2,3,4,5,6,7,8]
print circ_slice(a, 2, 4) # [2, 3, 4, 5]
print circ_slice(a, 7, 4) # [7, 8, 0, 1]
如果事先不知道起始位置,“tail + head”解决方案需要if语句。
这是一个更高效的版本:
import itertools
def circ_slice(a, start, length):
it = itertools.cycle(a)
next(itertools.islice(it, start, start), None)
return list(itertools.islice(it, length))
答案 2 :(得分:2)
试试这个:
l1 = li[1:4]
l2 = li[4:]+ [li[0]]
旁注:
您可以查看itertools.cycle,以便有效地获得结果。
使迭代器从iterable返回元素并保存a 每个的副本。当iterable耗尽时,返回from中的元素 保存副本。无限期重复