我在上课时遇到了这部分问题。它要求用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()
答案 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)
的元组
几乎所有代码都丢失了,但是您切换了i
和n
值。
x%2
是偶数的标准检查(对于奇数,它返回1,对于偶数,返回0)
答案 2 :(得分:0)
另一种奇特的方法:
即使a&1
等于0
,数字也是如此,a&1
为1
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]