繁体   English   中英

Python家庭作业-创建新列表

[英]Python Homework - creating a new list

分配:

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM