用另一个元素替换偶数元素

时间:2016-04-22 03:00:32

标签: python linked-list

我在上课时遇到了这部分问题。它要求用0替换偶数元素。我已经尝试但是仍然因为尝试将它除去而产生错误。有没有办法用0替换偶数,我可能最后会添加一个用户输入,所以必须在找到偶数的代码并替换它。

def main():  

    list = [7, 2, 2, 4, 5, 6, 9]

    print(sectionC(list))

def sectionC(list):  
    for n, i in list:
        if list == i//2:
            list[n]=0
main()

4 个答案:

答案 0 :(得分:4)

您面临的错误

  • 你的函数returns什么都没有。如果您希望函数的结果在完成后可见并可访问,则必须return,否则默认情况下您的函数将返回None

    虽然确实传递了像列表这样的可变对象 通过引用有效,以便在您的函数内修改它们 在任何地方修改它们,明确return值是一个好主意。

  • 永远不会为变量list命名。 list()是Python中的内置函数,通过声明具有相同名称的变量,您将失去调用它的能力。将变量更改为更合适的变量 - 例如,collection可以正常工作。

  • n, i in list不起作用 - 列表只允许您遍历一个元素。因此for i in list将起作用,其中i在每次迭代时被赋予元素的值。

    如果您希望在迭代中同时访问索引元素的值,则需要使用enumerate(),如下所示:for index, item in enumerate(collection)

    enumerate()获取一个列表并返回元组的列表,其中每个元组的格式为原始列表中的(index of element, corresponding element)。它主要用于使用我刚才引用的语法在索引和项目上轻松迭代。

解决此问题的正确方法

使用列表理解:

collection = [7, 2, 2, 4, 5, 6, 9] # renaming list variable 

print([x if x % 2 != 0 else 0 for x in collection])

可接受的方式

这是你试图做的,纠正了:

def sectionC(collection):  
    for index, item in enumerate(collection): # using better names than n, i
        if item % 2 == 0: # check if element is even
            collection[index] = 0
    return collection

请注意,此处的逻辑与列表推导相同。这是因为列表推导实际上扩展到了这样的东西 - 好处是简洁性和可读性,而不是效率。

答案 1 :(得分:0)

你太近了:

def sectionC(list):  
    for n, i in list:
        if list == i//2:
            list[n]=0

只需添加一个enumerate()即可拥有索引,并更改if语句以进行实际的偶数/奇数检查:

def sectionC(list):  
    for i,n in enumerate(list):
        if not n%2:
            list[i]=0

enumerate(list)正在做什么:

创建一个可迭代对象,在列表的情况下打印出看起来像(0,7) (1,2)的元组

几乎所有代码都丢失了,但是您切换了in值。
x%2是偶数的标准检查(对于奇数,它返回1,对于偶数,返回0)

答案 2 :(得分:0)

另一种奇特的方法:

即使a&1等于0,数字也是如此,a&11

时为奇数
def sectionC(list):  
    return [a if a&1 else 0 for a in list]

希望它有所帮助,

答案 3 :(得分:0)

可能是您正在寻找的:

list = [0 if i % 2 == 0 else i for i in list]