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

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

WBOY
WBOYオリジナル
2016-06-16 08:47:581373ブラウズ

問題: 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 多層ネストリストの再帰処理方法(推奨)は、すべてエディターで共有した内容ですので、ご参考になれば幸いです。スクリプトホームをご支援いただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。