-5

リストの入力と 0 または 1 のいずれかのオプションを取る関数を作成しようとしています。0 の場合は、絶対値 5 より大きい要素のリストを返したいと考えています。はオプション 1 です。奇数の要素のリストを返したいです。whileループも使いたいです。どこが間違っていますか??

def splitList2(myList, option):
    nList = []
    element = 0 
    while element < len(myList):
        if option == 0:
            if abs(element) > 5:
                nList.append(element)
        elif option == 1:
            if element % 2:
                nList.append(element)
        element = element + 1
    return nList
4

5 に答える 5

0

element紛らわしい要素インデックスの名前として使用しています。実際、後で myList の対応する要素の代わりにインデックスを調べたり追加したりします。

代替バージョン:

def splitList2(myList, option):
    nList = []
    n = 0 
    while n < len(myList):
    element = myList[n]
        if option == 0:
            if abs(element) > 5:
                nList.append(element)
        elif option == 1:
            if element % 2:
                nList.append(element)
        element = element + 1
    return nList

またwhile、そのようなタスクには最適な選択ではありません。while教育上の理由からこれを使用しようとしていると思います。ただし、より Pythonic な方法は次のとおりです。

def splitList2(myList, option):

    options = {
        0: lambda n: abs(n) > 5,
        1: lambda n: n % 2
    }

    return filter(options[option], nList)
于 2013-10-08T23:48:56.293 に答える
0

「どこが間違っているの?」 だけに答えるつもりです。質問。

  1. 2 つの異なる問題があります。は 2 つの異なる関数に属し、互いに独立してデバッグします。
  2. ソリューションの一部として "while ループ" を使用することを選択しました。それは解決策の一部かもしれませんが、悪いアプローチかもしれません。おそらく、それはあなたの問題のどれにも、あるいはどちらかにも、あるいは両方にも良いでしょう.
  3. あなたは Python を初めて使用し、おそらくプログラミング全般に精通しています。それは何も悪いことではありません。幸運を。解決策を試みる前に、問題を最も単純な形に還元することを学ぶ必要があります。通常、どんな問題でも、簡単に解決できるいくつかの小さな問題を見つけることができます。それらを 1 つずつ解決し、小さな問題の解決策を元の問題の解決策に統合します。
  4. 2 つの問題のそれぞれで、Python では「for element in iterable:」が優先されることがわかります。例、「for word in words:」、「for item in alist」など。
于 2013-10-08T23:58:17.187 に答える