在一个简单的列表中,以下检查是微不足道的:
x = [1, 2, 3]
2 in x -> True
但是如果是list of list,比如:
x = [[1, 2, 3], [2, 3, 4]]
2 in x -> False
如何解决这个问题才能返回 True
?
原文由 Al_Iskander 发布,翻译遵循 CC BY-SA 4.0 许可协议
在一个简单的列表中,以下检查是微不足道的:
x = [1, 2, 3]
2 in x -> True
但是如果是list of list,比如:
x = [[1, 2, 3], [2, 3, 4]]
2 in x -> False
如何解决这个问题才能返回 True
?
原文由 Al_Iskander 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是适用于任何嵌套级别的递归版本。
def in_nested_list(my_list, item):
"""
Determines if an item is in my_list, even if nested in a lower-level list.
"""
if item in my_list:
return True
else:
return any(in_nested_list(sublist, item) for sublist in my_list if isinstance(sublist, list))
这里有一些测试:
x = [1, 3, [1, 2, 3], [2, 3, 4], [3, 4, [], [2, 3, 'a']]]
print in_nested_list(x, 2)
print in_nested_list(x, 5)
print in_nested_list(x, 'a')
print in_nested_list(x, 'b')
print in_nested_list(x, [])
print in_nested_list(x, [1, 2])
print in_nested_list(x, [1, 2, 3])
True
False
True
False
True
False
True
原文由 Curt F. 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答869 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
试试这个,使用内置的
any
功能。这是最惯用的解决方案,它也很有效,因为any
一旦找到第一个匹配项就会短路并停止: