当前位置: 首页 > 面试题库 >

检查列表中是否存在项目的最佳方法?

伍昱
2023-03-14
问题内容

我有这样的示例列表:

example_list = [['aaa'], ['fff', 'gg'], ['ff'], ['', 'gg']]

现在,我检查它是否具有空字符串,如下所示:

has_empty = False;
for list1 in example_list:
    for val1 in list1:
        if val1 == '':
            has_empty = True

print(has_empty)

这可以正常工作,因为它可以打印True,但是是否需要更多的pythonik方法?


问题答案:

您可以使用itertools.chain.from_iterable

>>> from itertools import chain
>>> example_list = [['aaa'], ['fff', 'gg'], ['ff'], ['', 'gg']]
>>> '' in chain.from_iterable(example_list)
True

万一如果内部列表更大(超过100个项目),则any与生成器一起使用的速度将比上面的示例更快,因为这样,使用Python
for循环的速度代价将由快速in操作来补偿:

>>> any('' in x for x in example_list)
True

时序比较:

>>> example_list = [['aaa']*1000, ['fff', 'gg']*1000, ['gg']*1000]*10000 + [['']*1000]
>>> %timeit '' in chain.from_iterable(example_list)
1 loops, best of 3: 706 ms per loop
>>> %timeit any('' in x for x in example_list)
1 loops, best of 3: 417 ms per loop

# With smaller inner lists for-loop makes `any()` version little slow

>>> example_list = [['aaa'], ['fff', 'gg'], ['gg', 'kk']]*10000 + [['']]
>>> %timeit '' in chain.from_iterable(example_list)
100 loops, best of 3: 2 ms per loop
>>> %timeit any('' in x for x in example_list)
100 loops, best of 3: 2.65 ms per loop


 类似资料:
  • 问题内容: 知道列表中是否存在值(列表中包含数百万个值)及其索引是什么的最快方法是什么? 我知道列表中的所有值都是唯一的,如本例所示。 我尝试的第一种方法是(在我的实际代码中为3.8秒): 我尝试的第二种方法是(速度提高2倍:我的真实代码为1.9秒): 堆栈溢出用户建议的方法(我的实际代码为2.74秒): 在我的真实代码中,第一种方法花费3.81秒,第二种方法花费1.88秒。这是一个很好的改进,但

  • 问题内容: 查看URL存在并且响应不是404的最佳方法是什么? 问题答案: 您可以使用 手册中的示例2 : 第一个数组元素将包含HTTP响应状态代码。您必须解析它。 请注意,示例中的函数将发出HTTP HEAD请求,这意味着它将不会获取URL的正文。这比使用GET请求(也将返回正文)更有效。 还要注意,通过设置 默认 上下文,任何使用http流上下文的后续调用现在都将发出HEAD请求。因此,确保完

  • 问题内容: 在简单的清单中,下面的检查很简单: 但如果是列表列表,例如: 为了退货该如何解决? 问题答案: 使用内置功能尝试此操作。这是最惯用的解决方案,并且效率很高,因为一旦找到第一个匹配项,就会短路并停止:

  • 问题内容: 哪种方法可以更好地检查属性是否存在? Jarret Hardie提供了以下答案: 我看到它也可以通过以下方式完成: 一种方法通常比其他方法使用更多吗? 问题答案: 没有“最佳”方法, 因为您永远不会仅仅检查属性是否存在;它始终是某些较大程序的一部分。有几种正确的方法,一种值得注意的不正确的方法。 这是演示此技术失败的演示: 输出: 大多数情况下,您不想惹恼。这是用于执行特殊操作的特殊属

  • 问题内容: 查找对象是否在数组中的最佳方法是什么? 这是我知道的最好方法: 问题答案: 从ECMAScript 2016开始,您可以使用 如果要支持IE或其他较旧的浏览器: 编辑:这将无法在IE6、7或8上运行。最好的解决方法是自行定义它(如果不存在): Mozilla)版本: { }; } Daniel James的版本: Array.prototype.indexOf = function (

  • 问题内容: 可能是一个非常愚蠢的问题,检查elasticsearch中文档的字段是否存在的最佳方法是什么?我在文档中找不到任何内容。 例如,如果该文档没有字段/关键字“ price”,那么我不想返回结果。 {“ updated”:“ 2015/09/17 11:27:27”,“ name”:“ Eye Shadow”,“ format”:“ 1.5 g / 0.05 oz”,} 我可以做什么? 谢