我正在尝试编写一个名为splitList(myList, option)
的函数,该函数采用列表和选项0
或1
作为参数。如果选项的值为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整除的数字。
答案 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