私はPythonの初心者で、リスト内包表記を勉強しています。
私がやろうとしているのは、次のコードをリスト内包表記に変換することです。
def words_without_e():
count = 0
words = open('words.txt')
for word in words:
if word.find('e') == -1:
count += 1
words.close()
return count
これが私の弱い試みです:
words = open('words.txt')
print sum([1 for word in words if word.find('e') == -1])
しかし、残念ながらそれは機能していません。私が得ることを期待している答えは37641ですが、私は0を得ています。:(
同じことを行う別のコードを作成しようとしましたが、ソースとしてのファイルの代わりに、リストを使用しました。
def test():
words = ['hello', 'world', 'ciao']
return sum([1 for word in words if word.find('e') == -1])
そしてそれは動作します。
私はこの「かなり」類似したSO投稿を見て、そこに投稿されたコードを試しましたreturn len([word for word in words if len(word) >= 2 and word[0] == word[-1]])
。ソースがハードコードされたリストの場合は機能しますが、ソースが外部ファイルの場合は失敗します。
さて、私の質問は、リストsum
とタプルでのみ機能するのでしょうか?ドキュメントを正しく理解していれば、反復可能なものをまとめることができます。
どんな啓蒙も大歓迎です。:)