如何使用嵌套集顺序查找匹配? (或嵌套其他任何东西)

时间:2014-10-07 14:53:37

标签: python-3.x nested match sequence

我在内部设置了序列,如下所示: [1234, 'abc', 'def', {123, 'abc'}, 567]

我想在序列和内部集合中创建匹配匹配的函数。它当然是这样开始的: for element in sequence: if element == condition: do_something() 比我写的第二部分: elif condition in element do_something()

但在这里我收到了错误,因为: TypeError: argument of type 'int' is not iterable

我理解这个错误。但我怎么能做我想要的呢?如果存在此错误,则表示没有匹配,它应该转到另一个元素,检查它是否可迭代。我如何强制程序执行此操作?

最后,我不想只检查sequence[3]条件,因为我不知道序列的样子。它可以在不同的位置具有不同的长度和不同的元素。我也不知道条件会是什么样子,它会是int,string,sequence,set还是float。但我想这不是问题。

也许可以检查序列中的元素是否可迭代?只有当这个元素是可迭代的时候,我才能做另一个if并检查元素内的条件。

1 个答案:

答案 0 :(得分:0)

由于你有任意嵌套,你应该看看递归地做这个。 (谷歌'Python Flatten(一个不规则的)列表列表')

由于这是标记的Python 3,您可以编写如下内容:

from collections import Iterable

def flatten(l):
   for e in l:
       if isinstance(e, Iterable) and not isinstance(e, str):
           yield from flatten(e)
       else:
           yield e 

li=[1234, 'abc', 'def', {123, 'abc'}, 567]        

for e in ('abc', 'abd', 123, 124):        
    print(e in flatten(li))     
    # True, False, True, False