Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python对于列表中的元素[:]和列表中的元素有什么区别?_Python_List_For Loop_Data Structures - Fatal编程技术网

python对于列表中的元素[:]和列表中的元素有什么区别?

python对于列表中的元素[:]和列表中的元素有什么区别?,python,list,for-loop,data-structures,Python,List,For Loop,Data Structures,leetcode中有一个问题非常简单,但第二个问题的解决方案不正确: (问题: 给定一个数组nums,编写一个函数将所有0移到它的末尾,同时保持非零元素的相对顺序 例如,给定nums=[0,1,0,3,12],调用函数后,nums应该是[1,3,12,0,0] 注: 必须在不复制阵列的情况下就地执行此操作。 最小化操作的总数。 ) 为什么会有不同呢?当列表循环时,您既不能复制列表,也不能修改列表: class Solution(object): def moveZeroes(self,

leetcode中有一个问题非常简单,但第二个问题的解决方案不正确: (问题: 给定一个数组nums,编写一个函数将所有0移到它的末尾,同时保持非零元素的相对顺序

例如,给定nums=[0,1,0,3,12],调用函数后,nums应该是[1,3,12,0,0]

注: 必须在不复制阵列的情况下就地执行此操作。 最小化操作的总数。 )


为什么会有不同呢?

当列表循环时,您既不能复制列表,也不能修改列表:

class Solution(object):
    def moveZeroes(self, numbers):
        """
        :type numbers: List[int]
        :rtype: void Do not return anything, modify numbers in-place instead.
        """
        k = 0

        while True:
            try:
                numbers.remove(0)
                k += 1
            except ValueError:
                break

        numbers.extend([0] * k)

numbers = [0, 1, 0, 3, 12]

print(id(numbers), "->", numbers)

Solution().moveZeroes(numbers)

print(id(numbers), "->", numbers)
输出:

(4348993904, '->', [0, 1, 0, 3, 12])
(4348993904, '->', [1, 3, 12, 0, 0])

在列表上循环时不能修改列表。这在Python中是非法的

[:]
制作列表的独立副本以循环

但是这个问题要求你不要复制列表,所以这两种解决方案都是错误的

我不会确切地告诉您如何修复它,因为我想让您学习,但您应该创建一个集合。无论何时使用
.remove()
,都要将其添加到集合中。在启动for循环之前,检查元素是否在集合中。在循环结束时,实际从列表中删除集合中的元素

要创建集合,请使用
set()
。要向集合中添加元素,请使用
set\u name.add()


不要使用leetcode学习Python。Leetcode用于技术编码面试,而您的python不是很好。你不会通过面试的


您的代码违反了PEP 8,并且您的类没有继承
对象
。您的缩进也做得不对,这会导致Python中出现错误。找一个像PyCharm这样的编辑器(它是免费的),可以在将来警告您这些错误。这是一个很棒的IDE,说真的,试试看。

第一个解决方案也不正确,因为它复制了输入。检查我的答案,看看为什么从当前迭代的序列中删除内容是不好的:此外,应该仔细检查方法的indentation.Wee-woo!政治公众人物8警察因你不遵守政治公众人物8:理由:使用骆驼背而对你处以罚款。您应该使用带有下划线的
name\u
(4348993904, '->', [0, 1, 0, 3, 12])
(4348993904, '->', [1, 3, 12, 0, 0])