[英]Python Homework - creating a new list
分配:
编写一个名为
splitList(myList, option)
的函数,该函数将一个列表和一个选项(输入值为0或1splitList(myList, option)
作为输入。如果option的值为0,则该函数返回一个列表,该列表包含myList中的元素,为负数,并且如果该选项的值为1,则该函数返回一个列表,该列表由myList中偶数个元素组成。
我知道如何确定数字是否为偶数以及数字是否为负数。 我正在努力如何基于“选项”返回新的负数或偶数列表
到目前为止,这是我得到的:
def splitList(myList):
newlist = []
for i in range(len(myList)):
if (myList[i]%2 == 0):
newlist.append(myList [i])
return newlist
该程序出现以下错误:
Traceback (most recent call last): File "<string>", line 1, in <fragment>
builtins.TypeError: splitList() takes exactly 1 positional argument (4 given)
正如我在评论中提到的那样,您应该对缩进进行标准化:四个空格是Python标准。 通常,您可以将编辑器设置为插入四个空格而不是制表符(也不希望将制表符与空格混合使用)。
关于您的实际问题:尝试编写三个总计函数:一个返回所有负值,一个返回偶数,另一个基于option
调用适当的函数。
def splitlist(myList, option):
if option == 1:
return get_even_elements(myList)
elif option == 0:
return get_negative_elements(myList)
def get_even_elements(myList):
pass # Implementation this method here.
def get_negative_elements(myList):
pass # Implementation this method here.
# Test it out!
alist = [-1, 2, -8, 5]
print splitlist(alist, 0)
print splitlist(alist, 1)
亨利·基特的评论是正确的。 只需在newlist.append(myList [i])
之前添加一个空格,它就可以正常工作。
或者,如果您的老师允许您,则可以使用制表符而不是空格来完全避免此问题(只需确保在同一文件中不要同时使用两者)。
def splitList(myList, option):
return [i for i in myList if i<0] if option==0 else [i for i in myList if i>0]
# test
>>> myList=[2, 3, -1, 4, -7]
>>> splitList(myList, 0)
[-1, -7]
>>> splitList(myList, 1)
[2, 3, 4]
>>>
我之前的答案是错误的,我真的应该在张开嘴之前进行测试。 活到老,学到老...
编辑
您的回溯给您答案。 它正在将列表作为args列表读取。 不知道是否有解决该问题的超级pythonic方法,但是您可以使用命名参数:
splitList(myList=yourList)
要么
splitList(myList=(1,2,3))
要么
splitList(myList=[1,2,3])
但是你的问题可能真的是
splitList(1,2,3,4) # This is not a list as an argument, it is a list literal as your 'args' list
可以用以下方法解决:
splitList([1,2,3,4])
要么
splitList((1,2,3,4))
这是您的回溯吗?
Traceback (most recent call last):
File "pyTest.py", line 10, in <module>
print splitList(aList,1)
TypeError: splitList() takes exactly 1 argument (2 given)
该错误最有可能告诉您问题,这是因为该方法仅接受一个参数,但是我尝试传递两个参数,例如您的需求状态。
我按原样尝试了您的代码,但在传入正整数列表时没有出现任何错误,因此我不知道您的程序为什么“崩溃”,因此我怀疑其他因素正在干扰您的调试。 (尽管,正如其他人所说,您确实应该在每个缩进级别使用相同数量的空格。)
这是我输入的内容:
def splitList(myList):
newlist = []
for i in range(len(myList)):
if (myList[i]%2 == 0):
newlist.append(myList [i]) # Only 3-space indent here
return newlist
print splitList([1, 2, 3, 4, 5])
当我运行它时:
[2, 4]
您可以显示如何调用方法和确切的错误消息吗?
编辑
您可以在调用splitList方法的地方显示代码吗?
这是不正确的
myList [i]
是你的问题,那里不能有空间。 python对语法非常非常严格
由于人们似乎认为他们应该对我投反对票,所以让我解释一下:
通过使用该空格,您可以有效地说出myList(这是一个列表)和[i],这是一个列表字面量,在索引0处的值为“ i”。
因此,您要将两个变量(一个实际变量和一个文字)传递到append方法中,而不用逗号分隔,这将不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.