首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想将我的列表[1,2,3,4]的顺序改为[2,3,4,1],[3,4,2,1]和[4,3,2,1]

我想将我的列表[1,2,3,4]的顺序改为[2,3,4,1],[3,4,2,1]和[4,3,2,1]
EN

Stack Overflow用户
提问于 2016-02-23 12:24:46
回答 3查看 106关注 0票数 1

我已经写了一个示例代码。

代码语言:javascript
复制
planets=[('aries','mars'),('tarus','venus'),('gemini','mercury'),  ('cancer','moon')]
print(planets)    
asc=[ ]    
for i in range(0,len(planets)):
   asc.append(planets[(i+1)%(len(planets))])        
print(asc) 

第一个键是符号,后面是它的主键。

如果白羊座是上升星座,那么宫殿和领主的顺序是按照列表排列的。如果塔鲁斯是星座,那么第一个就是塔鲁斯,最后一个就是白羊座。

在我的代码中,我只能打印出第二个。为什么我的代码没有给出完整的输出呢?

EN

回答 3

Stack Overflow用户

发布于 2016-02-23 13:09:03

从数字上看,您想要旋转列表内容。也就是说,每次你想说

代码语言:javascript
复制
def rotate(planets):
    temp = planets[0]
    n = len(planets)
    for i in range(1, n):
        planets[i-1] = planets[i]
    planets[-1] = temp
    return planets

这只做了一次。为了每次执行此操作,请调用正确的旋转次数

代码语言:javascript
复制
planets=[('aries','mars'),('tarus','venus'),('gemini','mercury'), ('cancer','moon')]
for j in range(len(planets)):
    print planets
    planets = rotate(planets)

最后,planets返回到第一个值,并打印出所有四个值。

代码语言:javascript
复制
[('aries', 'mars'), ('taurus', 'venus'), ('gemini', 'mercury'), ('cancer', 'moon')]
[('taurus', 'venus'), ('gemini', 'mercury'), ('cancer', 'moon'), ('aries', 'mars')]
[('gemini', 'mercury'), ('cancer', 'moon'), ('aries', 'mars'), ('taurus', 'venus')]
[('cancer', 'moon'), ('aries', 'mars'), ('taurus', 'venus'), ('gemini', 'mercury')]
票数 1
EN

Stack Overflow用户

发布于 2016-02-23 13:28:55

假设你不想简单地旋转,而是遵循标题中的模式,那么维护两个列表会更容易(为了提高效率,请使用collectiones.deque),从一个列表的左侧弹出并向另一个列表的左侧推送,例如:

代码语言:javascript
复制
import itertools as it
from collections import deque
a1 = deque(planets)
a2 = deque()

for i in range(len(planets)):
    print(list(it.chain(a1,a2)))
    a2.appendleft(a1.popleft())

输出(1,2,3,4,2,3,4,1,3,4,2,1和4,3,2,1):

代码语言:javascript
复制
[('aries', 'mars'), ('tarus', 'venus'), ('gemini', 'mercury'), ('cancer', 'moon')]
[('tarus', 'venus'), ('gemini', 'mercury'), ('cancer', 'moon'), ('aries', 'mars')]
[('gemini', 'mercury'), ('cancer', 'moon'), ('tarus', 'venus'), ('aries', 'mars')]
[('cancer', 'moon'), ('gemini', 'mercury'), ('tarus', 'venus'), ('aries', 'mars')]
票数 1
EN

Stack Overflow用户

发布于 2016-02-23 12:59:11

使用你的方法:

代码语言:javascript
复制
planets=[('aries','mars'),('tarus','venus'),('gemini','mercury'),  ('cancer','moon')]
print(planets)
temp = planets
for j in range(len(planets)-1):
    asc = []
    for i in range(len(planets)):
        asc.append(temp[(i+1)%(len(planets))])
    temp = asc
    print(asc)

您只需将新创建的列表保存在一个temporary变量中,并将其放入另一个循环中,即可获得所有4种可能性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35568810

复制
相关文章

相似问题

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