【问题标题】:Python remove error [duplicate]Python删除错误[重复]
【发布时间】:2015-05-25 05:47:27
【问题描述】:

我需要删除列表中的所有奇数,并返回结果。

例如,purify([1,2,3]) 应该返回 [2]

我的功能是

def purify(num):

for x in num:
    if x%2 != 0:
        num.remove(x)    

return num

所以对于 purify([4, 5, 5, 4])。当它应该返回 [4, 4] 时,它返回 [4, 5, 4]。

【问题讨论】:

    标签: python list python-2.7


    【解决方案1】:

    如果让我做这个功能,我的答案是这样的:

    def purify(n):
        new_array = []
        for index in range(0, len(n)):
            if n[index] % 2 != 0:
                new_array.append(n[index])
        return new_array
    
    a = [4,5,5,4]
    print purify(a)
    

    接下来让我解释一下你的代码为什么会出错。

    当你的 for 循环扫描每个元素时,工作流程是这样的:

    1. 循环扫描第一个索引时的第一步

       v
      [4,5,5,4]
      
    2. 循环扫描第二个索引时的第二步。因为满足if-else条件,所以去掉第二个索引,第三个和第四个索引字体移位一个索引。

         v
      [4,5,5,4]
      
    3. 循环扫描第三个索引时的第三步。

           v
      [4,5,4]
      

    结果:[4,5,4]

    这就是为什么。第5个元素丢失被扫描。

    【讨论】:

    • 这个答案清楚地解释了python初学者。与深奥的理论相比,我更喜欢简单明了的教程。
    【解决方案2】:

    当您调用 remove 时,您会丢失/无效对列表的引用。

    实现相同行为的一种方法是创建一个新列表。

    def purify(old_list):
        new_list = []
        for x in old_list:
            if x % 2 == 0:
                new_list.append(x)
        return new_list
    

    或者你也可以做一个列表推导,以更 Pythonic 的方式表达这一点。

    def purify(old_list):
        return [for x in old_list if x % 2 == 0]
    

    【讨论】:

      【解决方案3】:

      使用list comprehension。这就是它们的设计目的。来自文档:

      列表推导式提供了一种创建列表的简洁方式。常见的应用是创建新列表,其中每个元素是应用于另一个序列或可迭代的每个成员的某些操作的结果,或者创建满足特定条件的那些元素的子序列。

      >>> L = [1,2,3,4,5]
      >>> [x for x in L if x%2==0]
      [2, 4]
      >>> L = [4,5,5,4]
      >>> [x for x in L if x%2==0]
      [4, 4]
      

      作为一个函数:

      >>> def purify(nums):
      ...     return [x for x in nums if x%2==0]
      ...
      >>> purify([4,5,5,4])
      [4, 4]
      

      【讨论】:

        猜你喜欢
        • 2019-01-19
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        相关资源
        最近更新 更多