2017-05-20 12 views
0

私たちはクラスでリストをやり始めました。以前の質問/回答が私を過去に助けてくれて以来、私は少し混乱しています。Intro to Python - 質問のリスト

最初の質問はリスト内のすべての負の数値を合計することでしたが、私は正しいと思っていますが、もう一度チェックしたいと思います。

import random 

def sumNegative(lst): 
    sum = 0 
    for e in lst: 
     if e < 0: 
      sum = sum + e 
    return sum 

lst = [] 
for i in range(100): 
    lst.append(random.randrange(-1000, 1000)) 

print(sumNegative(lst)) 

2番目の質問では、私はそれを書く方法にちょっと固執しています。質問は次のとおりでした: "sap"という単語が最初に出現するまでの単語内の単語数を数えます。私はそれがランダムなリストだと思っていますが、多くの情報を与えられていないので、それをやりなおすだけです。

私はエンディングが似ていることは知っていますが、数字に反対する文字列なので、最初の部分がどのようになるかわかりません。

私は奇数番号がリストに載っているどのように多くカウントするようにしたイン・クラスの問題のためのコードを書きました(それはそれは同様にその質問に対してランダムだと仮定すると、ここではランダムなリストだった)となった:

import random 

def countOdd(lst): 
    odd = 0 
    for e in lst: 
     if e % 2 = 0: 
      odd = odd + 1 
    return odd 

lst = [] 
for i in range(100): 
    lst.append(random.randint(0, 1000)) 

print(countOdd(lst)) 

これを2番目の質問の基準に合わせてどのように正確に変更しますか?私はちょうどその部分に混乱しています。ありがとう。

答えて

2

数値を加算するコードは正常です。

print(sumNegative([1, -1, -2])) 

ランダムなリストにも同じロジックが適用されます。手動で確認できるリストでテストすることをおすすめします。

あなたcountOdd機能についての注意、それはあなたが=不足していることが表示されます(平等のための==チェックを、=は割り当てのためである)とコードが奇数、偶数のないカウントするようです。コードは次のようになります。

def countOdd(lst): 
    odd = 0 
    for e in lst: 
     if e%2 == 1:  # Odd%2 == 1 
      odd = odd + 1 
    return odd 

あなたの2番目の質問のために、あなたは非常によく似た機能を使用することができたよう:上記を説明するために

def countWordsBeforeSap(inputList): 
    numWords = 0 
    for word in inputList: 
     if word.lower() != "sap":  
      numWords = numWords + 1 
     else: 
      return numWords 

inputList = ["trees", "produce", "sap"] 
print(countWordsBeforeSap(inputList)) 

を、countWordsBeforeSap機能:

  • が反復開始します言葉で
  • 言葉が"sap"以外であれば、それは言葉が"sap"されている場合、それは機能があること言葉に渡すことで、より一般的かもしれない関数からの早期

を返しカウンタをインクリメントし、

  • を継続あなたは、単一の文字列から来チェックしている言葉は、あなたが最初にそうようsplitに個々の単語に文字列を必要とする場合は

    def countWordsBefore(inputList, wordToCheckFor): 
        numWords = 0 
        for word in inputList: 
         if word.lower() != wordToCheckFor:  
          numWords = numWords + 1 
         else: 
          return numWords 
    
    inputList = ["trees", "produce", "sap"] 
    print(countWordsBeforeSap(inputList, "sap")) 
    

    :あなたがのためにチェックしたい

    inputString = "Trees produce sap" 
    inputList = inputString.split(" ") 
    

    これは、最初の文字列をスペースで区切られた単語に分割します。

    希望すると便利です。 トム

  • 0
    def count_words(lst, end="sap"): 
        """Note that I added an extra input parameter. 
         This input parameter has a default value of "sap" which is the actual question. 
         However you can change this input parameter to any other word if you want to by 
         just doing "count_words(lst, "another_word". 
        """ 
        words = [] 
        # First we need to loop through each item in the list. 
        for item in lst: 
         # We append the item to our "words" list first thing in this loop, 
         # as this will make sure we will count up to and INCLUDING. 
         words.append(item) 
    
         # Now check if we have reached the 'end' word. 
         if item == end: 
          # Break out of the loop prematurely, as we have reached the end. 
          break 
        # Our 'words' list now has all the words up to and including the 'end' variable. 
        # 'len' will return how many items there are in the list. 
        return len(words) 
    
    lst = ["something", "another", "woo", "sap", "this_wont_be_counted"] 
    print(count_words(lst)) 
    

    希望これは、あなたがより良いリストを理解するのに役立ちます!

    0

    リスト/ジェネレータの理解を有効に活用できます。以下は高速かつメモリ効率的です。

    ネガの合計:樹液の前に言葉の

    print(sum(i<0 for i in lst)) 
    

    2.カウント:あなたのサンプルリストのように、それは何の数字がリストに存在しない前提としています。

    print(lst.index('sap')) 
    

    これはランダムリストの場合です。フィルタ文字列。

    print(sum(i%2 != 0 for i in lst)) 
    
    :奇数の sap

    l = ['a','b',1,2,'sap',3,'d'] 
    l = filter(lambda x: type(x)==str, l) 
    print(l.index('sap')) 
    

    3.カウント用のインデックスを探します