ホームページ > バックエンド開発 > Python チュートリアル > Python での複数レベルの入れ子リストの再帰的処理方法 (推奨)

Python での複数レベルの入れ子リストの再帰的処理方法 (推奨)

WBOY
リリース: 2016-06-16 08:47:58
オリジナル
1459 人が閲覧しました

問題: Python を使用して複数レベルのネストされたリストを処理する

['and', 'B', ['not', 'A'],[1,2,1,[2,1],[1,1,[2,2,1]]], ['not', 'A', 'A'],['or', 'A', 'B' ,'A'] , 'B']
ログイン後にコピー

要件 1)1 つのレイヤーに拡張するにはどうすればよいですか?

要件 2)重複した要素を削除するには? 重複したリストを含め、サブリスト内の重複した要素を削除することによって生じるサブリストの重複を考慮する必要があります

#!/usr/bin/env python
# -*- coding: utf-8 -*-


def unilist(ll):
  
  """
  功能:用递归方法删除多层列表中重复元素
  """
  
  result = []
  for i in ll:
    if isinstance(i, list):
      if unilist(i) not in result:
        result.append(unilist(i))
    else:
      if i not in result:
        result.append(i)
  return result


def flatten(ll):
  """
  功能:用递归方法展开多层列表,以生成器方式输出
  """
  if isinstance(ll, list):
    for i in ll:
      for element in flatten(i):
        yield element
  else:
    yield ll


testcase= ['and', 'B', ['not', 'A'],[1,2,1,[2,1],[1,1,[2,2,1]]], ['not', 'A', 'A'],['or', 'A', 'B' ,'A'] , 'B']

print unilist(testcase)

print list(flatten(testcase))
ログイン後にコピー

実行結果

['and', 'B', ['not', 'A'], [1, 2, [2, 1], [1, [2, 1]]], ['or', 'A', 'B']]

['and', 'B', 'not', 'A', 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 'not', 'A', 'A', 'or', 'A', 'B', 'A', 'B']
ログイン後にコピー

上記の Python 多層ネストリストの再帰処理方法(推奨)は、すべてエディターで共有した内容ですので、ご参考になれば幸いです。スクリプトホームをご支援いただければ幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート