私は自分でプログラミングを学んでいます。私のコードでは、ネストされたループを練習しており、リストから一致するすべての番号を見つけることができるかどうかを確認するための練習をしています。ただし、最初の番号のみが返され、リスト全体が表示されるわけではありません。誰か助けてもらえますか?前もって感謝します
mylist = []
def intersection(lst1, lst2):
for n in lst1:
for o in lst2:
if n == o:
mylist.append(n)
return mylist
return
声明は、それがループ内の関数の最後に配置とされていないような、インデントする必要があります:
def intersection(lst1, lst2):
mylist = []
for n in lst1:
for o in lst2:
if n == o:
mylist.append(n)
return mylist
以前は、直後の場合mylist.append(n)
、関数はそのコード行の直後に結果を返します。これは、最初の重複する要素が見つかるとトリガーされます(つまり、回答には1つの要素しかありません)。代わりに関数の最後に配置すると、アルゴリズムが完了したときにのみ返されます。
またmylist
、関数内の定義を移動しました。そうしないと、関数を複数回呼び出すと結果が上書きされてしまいます。
また、Pythonを学習しているので、リスト内包表記を調べることもできます。リスト内包表記は、より「Pythonic」であり、より簡潔で、多くの場合、より高速に実行されます。
def intersection(lst1, lst2):
return [n for n in lst1 for o in lst2 if n == o]
ただし、重複する要素がいずれかのリストに複数回表示される場合、上記の実装は両方とも結果に重複があります。例えば:
intersection([1,1,2,3], [1,1,2,4])
>>> [1,1,1,1,2]
より良い実装では、Pythonセットと組み込みのセット交差演算子を使用します。
def intersection(lst1, lst2):
return list(set(lst1) & set(lst2))
intersection([1,1,2,3], [1,1,2,4])
>>> [1,2]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加