0

リストと、またはパラメータとしてsplitList(myList, option)のオプションを取る関数を作成しようとしています。オプションの値が の場合、関数は負の要素で構成されるリストを返し、オプションの値が偶数の場合、関数は の要素で構成されるリストを返します(0 は偶数と見なされます)。 、2 で割り切れるからです)。010myList1myList

例えば:

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 で割り切れるすべての数値を返すことです。

4

5 に答える 5

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)
于 2013-03-08T18:12:46.177 に答える
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が呼び出された関数のリスト内包にある場合、それがニーズを満たしているかどうかわからない。

また、「関数名は小文字にする必要があります。読みやすさを向上させるために、必要に応じて単語をアンダースコアで区切ります。」

于 2013-03-08T18:20:26.567 に答える
1

あなたはあまりにも早く戻ります。最初に床のループを完了し、ループの内側からではなく、その後に戻る必要があります。

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

それ以外に、必要がないのになぜ負の値リストを計算するのですか?

于 2013-03-08T18:18:01.423 に答える
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)
于 2013-03-08T18:22:59.137 に答える
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
于 2013-03-08T18:18:34.337 に答える