可被2整除:Python

2024-10-03 21:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个名为splitList(myList, option)的函数,该函数接受一个列表和一个选项,该选项可以是01作为参数。如果选项的值是0,则函数返回一个由myList中的负元素组成的列表,如果选项的值是1,则函数返回一个由myList中的偶数元素组成的列表(我们认为0是偶数,因为它可以被2整除)。

例如:

splitList([1,-3,5,7,-9,-11,0,2,-4], 0)

将返回列表:

[-3,-9,-11,-4]

其中:

splitList([1,-3,5,7,-9,-11,0,2,-4], 1)

将返回列表:

[0,2,-4]

对于这个问题,我必须使用for loop

以下是我所拥有的:

def splitList(myList, option):
    negativeValues = []
    positiveValues = []
    evenValues = [] 
    for i in range(0,len(myList)):       
        if myList[i] < 0: 
            negativeValues.append(myList [i]) 
        else: 
            positiveValues.append(myList [i]) 

    for element in myList: 
        if option == 1: 
            myList [i] % 2 == 0 
            evenValues.append(myList [i]) 
            return evenValues 
        else: 
            return negativeValues

我唯一做不到的是对列表排序并返回所有可被2整除的数字。


Tags: 函数in元素列表forif选项option
3条回答

可以从这些基本体构建所有变体:

def even_list(numbers):
    return [x for x in numbers if not (x & 1)]

def odd_list(numbers):
    return [x for x in numbers if x & 1]

def negative_list(numbers):
    return [x for x in numbers if x < 0]

def positive_list(numbers):
    return [x for x in numbers if x > 0]

然后测试:

>>> def test():
...     numbers = list(range(-3, 4))
...     print even_list(numbers)
...     print odd_list(numbers)
...     print positive_list(numbers)
...     print negative_list(numbers)
... 
>>> test()
[-2, 0, 2]
[-3, -1, 1, 3]
[1, 2, 3]
[-3, -2, -1]

稍后:所以从@Kos中偷窃,您可以这样写split_list

def split_list(myList, option):
    predicate = negative_list if not option else even_list
    return predicate(myList)

或:

def split_list(myList, option):
    predicates = [negative_list, even_list]
    return predicates[option](myList)

如果for-loop在被调用函数的列表理解中,不确定它是否满足您的需要。

Also:“函数名应该小写,必要时用下划线分隔单词,以提高可读性。”

在这里使用循环有点多余,因为有一个标准函数filter可以执行您想要的操作:返回一个新列表,其中包含与给定谓词匹配的列表元素。

我们先定义谓词:

def is_even(x):
    return x % 2 == 0

def is_negative(x):
    return x < 0

然后您可以很容易地根据filter定义函数:

def splitList(myList, option):
    predicate = is_negative if option == 0 else is_even
    return filter(predicate, myList)

我相信这就是你想要达到的:

def splitList(myList,option):

    result = []

    if option == 0:
        for item in myList:
            if (item < 0):
                result.append(item)
    elif option == 1:
        for item in myList:
            if (item % 2 == 0):
                result.append(item)
    else:
        return "Option Error"

    return sorted(result)

print splitList([1,-3,5,7,-9,-11,0,2,-4], 0)
print splitList([1,-3,5,7,-9,-11,0,2,-4], 1)
print splitList([1,-3,5,7,-9,-11,0,2,-4], 2)

输出:

[-11, -9, -4, -3]
[-4, 0, 2]
Option Error

相关问题 更多 >