Python Homework - 创建一个新列表

时间:2013-03-07 19:08:44

标签: python list

作业:

  

编写一个名为splitList(myList, option)的函数,它将一个列表和一个选项作为输入,该选项为0或1.如果该选项的值为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)

6 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,你应该标准化你的缩进:四个空格是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)

答案 1 :(得分:0)

Henry Keiter的评论是正确的。只需在newlist.append(myList [i])之前添加一个空格,它就可以正常工作。

或者,如果你的老师允许你,你可以使用制表符而不是空格来完全避免这个问题(只是确保你不要在同一个文件中使用它们)。

答案 2 :(得分:0)

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]
>>> 

答案 3 :(得分:0)

我之前的回答是不正确的,我真的应该在我张开嘴之前进行测试...... Doh !!!生活和学习......

修改

你的追溯给你答案。它将列表作为参数列表读取。不确定是否有超级pythonic方法绕过它,但你可以使用命名参数:

splitList(myList=yourList)

OR

splitList(myList=(1,2,3))

OR

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])

OR

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)

错误很可能告诉你这个问题,这就是该方法只接受一个参数,但我尝试传递两个参数,比如你的需求状态。

答案 4 :(得分:0)

我按原样尝试了你的代码,当我输入正整数列表时我没有收到任何错误,所以我不知道为什么你的程序“崩溃”,所以我怀疑其他东西干扰了你的调试。 (尽管正如其他人所说,你真的应该在每个缩进级别使用相同数量的空格。)

这是我输入的内容:

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]

你能说明你是如何调用方法和确切的错误信息吗?

答案 5 :(得分:-6)

修改

您能显示调用splitList方法的代码吗?

这是不正确的

myList [i]

是你的问题,你不能在那里有空间。 python对语法非常非常严格

因为人们似乎认为他们应该投票给我,让我解释一下:

通过拥有该空格,您实际上说myList(这是一个列表)和[i],这是一个列表文字,其值为'i',索引为0 ....

所以你将两个变量(一个实际变量和一个文字)传递给append方法,不用逗号分隔,这将无效。