首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python列表轮换

Python列表轮换
EN

Stack Overflow用户
提问于 2012-02-27 06:27:15
回答 4查看 169.4K关注 0票数 101

可能重复:

Efficient way to shift a list in python

我想将Python列表向右或向左旋转任意数量的项(后者使用负参数)。

如下所示:

>>> l = [1,2,3,4]
>>> l.rotate(0)
[1,2,3,4]
>>> l.rotate(1)
[4,1,2,3]
>>> l.rotate(-1)
[2,3,4,1]
>>> l.rotate(4)
[1,2,3,4]

如何做到这一点呢?

EN

回答 4

Stack Overflow用户

发布于 2012-02-27 06:30:10

def rotate(l, n):
    return l[-n:] + l[:-n]

更传统的方向:

def rotate(l, n):
    return l[n:] + l[:n]

示例:

example_list = [1, 2, 3, 4, 5]

rotate(example_list, 2)
# [3, 4, 5, 1, 2]

rotate的参数是一个列表和一个表示移位的整数。该函数使用slicing创建两个新列表,并返回这些列表的串联。rotate函数不修改输入列表。

票数 184
EN

Stack Overflow用户

发布于 2012-02-27 06:32:35

如果适用,您可以使用collections.deque作为解决方案:

import collections

d = collections.deque([1,2,3,4,5])
d.rotate(3)

print d
>>> deque([3, 4, 5, 1, 2])

作为奖励,我希望它比内置的list更快。

票数 114
EN

Stack Overflow用户

发布于 2012-02-27 06:36:51

以下函数将向右旋转list lx spaces:

def rotate(l, x):
  return l[-x:] + l[:-x]

请注意,只有当x超出[-len(l), len(l)]范围时,才会返回原始列表。要使其适用于x的所有值,请使用:

def rotate(li, x):
  return li[-x % len(li):] + li[:-x % len(li)]
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9457832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档