find_indexes
の行数をreturn文のようにif/else文を使って1行に減らすことはできますか?私は二度、理解を記述することなく、このようなものにする方法を変更しているよif/else文で空リストの理解をテストする
def find_indexes(sentence, target):
indexes = [index for index, x in enumerate(sentence.split()) if target == x]
return indexes if indexes else False
target = 'dont'
sentence = 'we dont need no education we dont need no thought control no we dont'
print(find_indexes(sentence, target))
>> [1, 6, 13]
print(find_indexes(sentence, 'johndoe'))
>> False
:
def find_indexes(sentence, target):
return [index for index, x in enumerate(sentence.split()) if target == x] \
if [index for index, x in enumerate(sentence.split()) if target == x] else False
は、スペースで区切られた単語の文字列を取るプロシージャを書きます (句読点や大文字は使用しないでください)と「ターゲット」 という単語を含み、ターゲット単語の文字列内の位置を 個の単語で示します。
がは、我々は、我々は
いけない全く何の思想統制を必要としないいけない何の教育を必要としないいけないとターゲットが単語である::
例えば、文字列がある場合
を「いけません」文字列の1位、6位、13位に "dont"が表示されるので、プロシージャはリスト1,6,13を返します。 (私たちは、0から、文字列内の単語の 位置をカウント開始)あなたの手順では、対象の単語が文字列に表示されていない場合
'return [indexのインデックス、xは列挙する(sentence.split())if target == x]またはFalse' – mshsayem
注:明示的に' False'を返すのは無意味です。単にlistcomp自体を返してください。それが空であれば、それは偽の値として振る舞い、99%の時間、それはうまくいっています(またはそれはまだシーケンスのように動作するので、より良いより良いので、結果に対して盲目的に 'for'ループを行うことができます。単に何もしません)。実際の 'True' /' False'値を主張するのは一般的にPythonではなく、暗黙の真実性テストを行うだけです。 – ShadowRanger
なぜ[False]は '[]'よりも良い戻り値だと思いますか?空リストは、ブール値を使用する必要のあるコンテキストでは 'False'として扱われます(そして' foo == False'を明示的に数えています)。 – chepner