我在内部设置了序列,如下所示:
[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
并检查元素内的条件。
答案 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