可被2整除:Python

时间:2013-03-08 18:05:43

标签: python python-2.7

我正在尝试编写一个名为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整除的数字。

5 个答案:

答案 0 :(得分:4)

使用循环在这里有点多余,因为有一个标准函数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)

答案 1 :(得分:2)

您可以从这些原语中构建所有变体:

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:“函数名称应为小写,并根据需要用下划线分隔,以提高可读性。”

答案 2 :(得分:1)

你回来太早了。首先必须完成foor循环并在它之后返回,而不是从循环内部返回。

实施例

for i in range(5):
    print i
    numbers.append(i)
    return numbers   //wrong: exit the function on the first pass in the loop.

for i in range(5):
    print i
    numbers.append(i)

return numbers       //right

除此之外,如果你不需要它,为什么要计算负值列表呢?

答案 3 :(得分:1)

def splitList(myList,option):

    negative_numbers = [i for i in myList if i < 0]
    even_numbers = [i for i in myList if i % 2 == 0]

    return sorted(even_numbers) if option else sorted(negative_numbers)

答案 4 :(得分:0)

我相信这就是你想要实现的目标:

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