Pythonの入れ子リスト
2022-02-14 22:50:51
プロジェクトのgithubアドレスです。
bitcarmanlee イージーアルゴリズムインタビューと実践
スターへようこそ、コメントを残して、一緒に学び、進歩しましょう。
1. ネストされたリストの反復処理
ネストされたリストをトラバースして出力することはよくある要件である。これは次の2つの方法で実現される。
def nested_list(list_raw,result):
for item in list_raw:
if isinstance(item, list):
nested_list(item,result)
else:
result.append(item)
return result
def flatten_list(nested):
if isinstance(nested, list):
for sublist in nested:
for item in flatten_list(sublist):
yield item
else:
yield nested
def main():
list_raw = ["a",["b","c",["d"]]
result = []
print "nested_list is: ",nested_list(list_raw,result)
print "flatten_list is: ",list(flatten_list(list_raw))
main()
コードを実行させると、次のような出力が得られます。
nested_list is: ['a', 'b', 'c', 'd']
flatten_list is: ['a', 'b', 'c', 'd']
nested_list メソッドは再帰を使用し、アイテムがリスト型である場合、再帰的に自分自身を呼び続けます。そうでない場合は、単に結果リストに項目を追加します。
flatten_listメソッドはジェネレータアプローチを採用していますが、これは基本的に再帰の考え方と同じです。
2. 2レベルのネストしたリストの重複排除
リストの中にリストがネストしており、重複を排除し、重複排除されたリストを生成する必要があります。
def dup_remove_set(list_raw):
result = set()
for sublist in list_raw:
item = set(sublist)
result = result.union(item)
return list(result)
def main():
list_dup = [[1,2,3],[1,2,4,5],[5,6,7]]
print dup_remove_set(list_dup)
コードを実行させます。
[1, 2, 3, 4, 5, 6, 7]
基本的な考え方:各サブリストをセットに変え、そしてそれをマージする。
3. 複数ネストの重複排除
def dup_remove(list_raw,result):
for item in list_raw:
if isinstance(item, list):
dup_remove(item,result)
else:
result.add(item)
return list(result)
def main():
list_raw = ["a",["b","c",["d","a","b"]]
result = set()
print "dup_remove is: ",dup_remove(list_raw,result)
コードを実行させます。
dup_remove is: ['a', 'c', 'b', 'd']
基本的な考え方は先ほどのネストしたリストをトラバースするものと似ていますが、唯一違うのは結果がリストであること、そして重みを取り除くために結果がセットであることで、最終結果が取り除いた結果であることを保証しています。
関連
-
[解決済み】pytorchでmodel.eval()は何をするのですか?
-
[解決済み】Pytorch AssertionError: CUDAを有効にした状態でTorchがコンパイルされていない
-
Pyfinanceを用いた証券リターン分析のためのPythonデータビジュアライゼーション 例 詳細
-
[解決済み] 'MyClass' オブジェクトには '__getitem__' という属性がありません。
-
[解決済み] Pandasのtranspose()と.Tの違いについて
-
[解決済み] datetime.fromtimestamp vs datetime.utcfromtimestamp、どちらを使用するのが安全か?
-
[解決済み] Pythonで数字が奇数か偶数かチェックする【重複あり
-
[解決済み] Pylint の無効な定数名
-
[解決済み] プロットリー ローソク足チャートにボリュームを追加する方法
-
[解決済み] Python/Kivy : kivyにカレンダーを追加する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pandas reports TypeError: 'Series' object are mutable, thus they cannot be hashed.
-
不足している必須依存関係 'numpy' を解決する
-
[解決済み] バイトをstrに連結できない
-
[解決済み] ImportError: concurrent.futures.processという名前のモジュールはありません。
-
[解決済み] 2つの機能を同時に実行させる
-
[解決済み] pythonw.exe か python.exe?
-
[解決済み] DjangoにおけるIntegrityError
-
[解決済み] 2つのファイルを比較し、共通する行を削除する
-
TypeError: __init__() missing 1 required positional argument: 'on_delete' Solution
-
エラーの解決方法 ValueError: allow_pickle=Falseの場合、オブジェクトの配列を読み込むことができません。