Python中的循环列表

时间:2014-08-24 10:35:27

标签: python python-2.7 logic

我在示例li = [1,2,3,4,5,6,7,8]中有一个列表 现在我想要切片列表示例: li[1:4][2,3,4]

现在我想要列表的其他部分,即[5,6,7,8,1] 所以我怎么能蟒蛇化。

3 个答案:

答案 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中的元素   保存副本。无限期重复