首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python删除错误

Python删除错误
EN

Stack Overflow用户
提问于 2015-03-22 01:11:38
回答 3查看 2.3K关注 0票数 1

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

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

我的职责是

def purify(num):

代码语言:javascript
复制
for x in num:
    if x%2 != 0:
        num.remove(x)    

return num

因此,对纯化(4,5,5,4)。当它应该返回4,4时,它返回4,5,4。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-22 01:52:00

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

代码语言:javascript
复制
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. 循环扫描第一次索引时的第一步 五4,5,5,4
  2. 第二步,当循环扫描第二个索引。因为它满足if- and条件,第二个索引被移除,第三个和第四个索引字体移动索引。 五4,5,5,4
  3. 第三步,当循环扫描第三指数。 五、4、5、4

结果: 4,5,4

怪不得。这5种元素失去扫描功能。

票数 2
EN

Stack Overflow用户

发布于 2015-03-22 01:23:42

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

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

代码语言:javascript
复制
def purify(old_list):
    new_list = []
    for x in old_list:
        if x % 2 == 0:
            new_list.append(x)
    return new_list

或者,你也可以做一个清单理解,以一种更毕加索的方式来表达这一点。

代码语言:javascript
复制
def purify(old_list):
    return [for x in old_list if x % 2 == 0]
票数 1
EN

Stack Overflow用户

发布于 2015-03-22 01:17:31

使用列表理解。这就是他们设计的目的。从医生那里:

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

代码语言:javascript
复制
>>> 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]

作为一项职能:

代码语言:javascript
复制
>>> def purify(nums):
...     return [x for x in nums if x%2==0]
...
>>> purify([4,5,5,4])
[4, 4]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29189890

复制
相关文章

相似问题

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