如何从 for 循环追加修改后的数据? (Python)

问题描述 投票:0回答:2

感谢您查看我的问题,顺便说一句,我使用Python 3,这是代码:)

scale=[1,2,3,4,5,6]
MNP = {'scale degree' : []
}


 for index, value in enumerate(scale):

    scale.insert(len(scale),scale[0])
    del scale[0]
    MNP['scale degree'].append(scale[1])
    print (MNP['scale degree'])

所以,我的目标是将一个我称为“scale”的列表的修改版本附加到一个我称为“MNP”的字典中。 想要的输出是一个列表('scale Degree',取列表的原始数字(例如scale),并将其移动到列表的末尾,同时所有数字将向左移动一位,如果我发出在函数内打印比例的命令,就会发生以下情况:

for index, value in enumerate(scale):

    scale.insert(len(scale),scale[0])
    del scale[0]
    MNP['scale degree'].append(scale[1])
    print (MNP['scale degree'])

[1, 2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 1]
[3, 4, 5, 6, 1, 2]
[4, 5, 6, 1, 2, 3]
[5, 6, 1, 2, 3, 4]
[6, 1, 2, 3, 4, 5]

然而,当我尝试这样做时,我遇到了(是的,过去时)我的理解问题。看看,如果我执行命令:

    print(scale[1])

然后它实际上确实打印数字2,3,4,5,6,1。这就是我使用枚举函数的原因,我认为这可以解决问题。我想,也许索引号以某种方式决定了哪个列表将被打印出来,但这当然是错误的,即使输出是相同的,而且,值得一提的是,我仍然是一个仰望星空的新手。然而我做了一些思考,意识到它只是打印出每个修改列表的第二个值,就像我给它一个命令只打印一个版本一样,但如果我要求它附加,那就是一个不听话的小混蛋整个事情都被搞砸了。

该死的地狱。

所以,现在我的问题是,如何附加比例尺的修改版本,而不仅仅是单个值?

附加整个比例确实有效(这也是我的第一个解决方案),因为输出是: [[2,3,4,5,6,1]] [[3,4,5,6,1,2],[3,4,5,6,1,2]] [[4,5,6,1,2,3],[4,5,6,1,2,3],[4,5,6,1,2,3]]

以这种方式继续下去,直到达到 [1,2,3,4,5,6] * 6

提前感谢您的任何帮助,如果可以的话,您能否推荐资源,以便我能够对幕后发生的事情有一个基本的了解?可能还有很多东西我仍然不明白(我的意思是仅与这个问题有关,当然,总的来说,我that接近理解所有需要知道的事情(哈哈))。

再次感谢

  • 詹姆斯

P.S 我一般应该等待多长时间才能寻求 SE 帮助? (对于这个特殊问题,我一直在与 if 决斗,进行了坚实的第 1/2 天)

P.S.S 感谢 Borodin 指出在 for 循环中操作数据是不好的做法。应该如何正确执行?

python loops for-loop python-3.x append
2个回答
0
投票

我认为这个会有帮助。它有

rotate(n)
,可以将列表中的元素移动
n
个位置。

import collections
my_list = []
d = collections.deque([1,2,3,4,5])
for i in range(5):
    d.rotate(-1)
    my_list.append(d)
print my_list

输出:

[deque([1, 2, 3, 4, 5]), deque([1, 2, 3, 4, 5]), deque([1, 2, 3, 4, 5]), deque([1, 2, 3, 4, 5]), deque([1, 2, 3, 4, 5])]

0
投票

这就是你想要的效果吗?

>>> l = [1,2,3,4]
>>> l.append(my_list.pop())
[2,3,4,1]

或者如果你想把它展开一点:

>>> l = [1,2,3,4]
>>> e = my_list.pop()
>>> l.append(e)
[2,3,4,1]

在这两种情况下,我们都会从列表中删除第一个元素并将其粘贴到列表的末尾 - 我认为这就是您想要的。

或者如果您不想修改原始列表:

>>> l = [1,2,3,4]
>>> l[1:]+[l[0]]    
[2,3,4,1]

在这里,我们只是重新组合切片 - 原始列表保持不变。请注意,我必须将 l[0] 放入列表中,因为这就是列表实现 + 的方式 - 我无法执行 l[1:] + l[0]。

© www.soinside.com 2019 - 2024. All rights reserved.