2015-01-14 25 views
0

我有Python中的嵌套列表,像这样的:如何测试一个嵌套的Python列表包含给定的字符串

l = [['a', 'b', 'c'], ['d', 'e', 'f']] 

我想快速测试,如果给定的字符串等任何的任何子列表中的字符串。我可以编写一个函数来展开列表,但测试需要发生在我的程序的一个时间关键部分。有没有更快或更优雅的方式来做到这一点?

+0

迭代列表? –

+0

@AshwiniChaudhary:我应该删除吗? – Matthew

回答

7

你不能避免在这里循环扫描元素;但至少可以避免扫描所有列表,并将每个子列表的扫描任务委派给Python C代码。

使用any() function测试每个子列表中的发电机表达式:

any(search in sublist for sublist in l) 

any()将停止在发电机表达迭代的时刻,如果发现一个True值(例如,当search in sublist发现匹配)。

+0

这是最好的解决方案,因为它会短路。最坏的情况是O(N),但它必须是问题的定义。充其量,你将会在短期内获得更高的保证金。 – CoryKramer

相关问题