Append删除Python中的最后一个索引

Append删除Python中的最后一个索引,python,Python,我的问题是,我试图创建一个函数,返回一个列表中所有旋转的列表。当我在函数中写入打印时,它似乎按预期工作,但当我附加它时,最后一个索引丢失。这是我的密码 def rotation(list): l =[] for i in range(len(list)): m = list.pop() list = [m]+list print(list) l.append(list) return l print(

我的问题是,我试图创建一个函数,返回一个列表中所有旋转的列表。当我在函数中写入打印时,它似乎按预期工作,但当我附加它时,最后一个索引丢失。这是我的密码

    def rotation(list):
    l =[]
    for i in range(len(list)):
        m = list.pop()
        list = [m]+list
        print(list)
        l.append(list)
    return l
print(rotation(["a","b","c","d"]))
输出是

['d', 'a', 'b', 'c']
['c', 'd', 'a', 'b']
['b', 'c', 'd', 'a']
['a', 'b', 'c', 'd']
[['d', 'a', 'b'], ['c', 'd', 'a'], ['b', 'c', 'd'], ['a', 'b', 'c', 'd']]

为什么打印的值没有直接进入附加列表,除了最后一个['a'、'b'、'c'、'd']可以正常工作?任何帮助都将不胜感激,谢谢您

m=list.pop->此部分显示最后一个元素并将其删除。 如果我是你,我会试着用这样的东西:

m = list[-1]
[-1]返回最后一个元素

然后,如果需要使用不带最后一个元素的列表,请使用以下命令:

new_list = list[0:-1]
新列表等于0到最后一个元素范围内的列表,不包括它

这是一个网站,其中列出了您可以在Python中的list对象上执行的所有操作。
使用pop时,该值将从该列表中消失 如果希望获取列表的最后一个值而不完全删除,请使用订阅[-1]

def rotation(lst):
    l =[]
    for i in range(len(lst)):
        l.append(lst)
        m = lst[-1]
        lst = [m]+lst[:-1]
    return l
print(rotation(["a","b","c","d"]))
输出:

[['a', 'b', 'c', 'd'], ['d', 'a', 'b', 'c'], ['c', 'd', 'a', 'b'], ['b', 'c', 'd', 'a']]

在python中,所有可变对象都是通过引用传递的,这意味着当您执行l.append时,实际上是在向list追加引用

然后,当您再次从列表中弹出时,l中的同一引用将被弹出,我将尝试在每行执行后用实际值解释:

l=[] 对于rangelenlist中的i: 此时,l是[],列表是['a','b','c','d']

m=list.pop 列表是['a','b','c',m现在是'd'

列表=[m]+列表 打印列表 l、 附录 列表现在是['d'、'a'、'b'、'c'],我们打印该值并将其附加到l,l现在是['d'、'a'、'b'、'c']]

然后,我们开始第二次迭代:

m=list.pop 这里发生了两件事,list现在是['d','a','b'],所以包含对list的引用的l变成了[['d','a','b']]

列表=[m]+列表 列表现在变成了一个新列表,它是[m]和列表的组合,引用丢失,现在您在一个新列表上操作,因此在pop之后,列表在l中只剩下3个项目。如前所述,l.appendlist向列表添加了一个链接,而不是值,当您更改列表时,所有链接都指向更改的列表。在迭代结束时,您添加了一个包含4个元素的列表,在下一次迭代开始时,您删除了最后一个元素,即3-3-3-4。使用list.copy,它是用于这些事情的

def rotation(list):
    l = []
    for i in range(len(list)):
        m = list.pop()
        list = [m]+list  
        # Little tricks in single line: list[:0] = list.pop()
        l.append(list.copy())
    return l

print(rotation(["a","b","c","d"]))

您使用了pop,它应该删除最后一项可能问题是,您在使用它执行for循环时更改了[list]是的,但我在开始时添加了它,并且在打印中似乎没有问题。我真的不知道如何或为什么,也许这是草率的编码,但l.appendlist+[]修复了问题BTW,你真的不应该用一个同名的变量来覆盖内置的。