【问题标题】:How to determined if a 2 dimensional list contain a value?如何确定二维列表是否包含值?
【发布时间】:2012-09-30 04:48:31
【问题描述】:

我有一个如下列表

mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')]

如何查看列表是否包含“value2”?

【问题讨论】:

标签: python list python-2.7


【解决方案1】:

您可以使用any 简单地检查所有子列表:

any('value2' in subl for subl in mylist)

【讨论】:

    【解决方案2】:

    使用any():

    any('value2' in sublist for sublist in mylist)
    

    【讨论】:

    • 谢谢,我很好奇是否有办法获得匹配的项目?
    • 要获取包含您要查找的值的项目,您应该使用常规的for 循环并在列表中存在'value2' 时返回或中断。如果要查找所有匹配项,可以使用[sublist for sublist in mylist if 'value2' in sublist]
    【解决方案3】:

    类似于any(),同样支持短路的解决方案:

    >>> from itertools import chain
    >>> mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')]
    >>> 'value2' in chain(*mylist)
    True
    

    证明它像any()一样短路:

    >>> it=chain(*mylist)
    >>> 'value2' in it
    True
    >>> list(it) #part of iterable still not traversed
    ['value3', 'secval1', 'secval2', 'secval3']
    

    【讨论】:

    • any 已经短路了。通过创建一个定义__nonzero__ 的类来测试它,在其中放置一个print 语句,并将其用作any 参数中的第二个值(当第一个是True 时)。 print 语句将不会被执行。
    • @poorsod 我知道,这就是我说"similar to any()" 的原因。 :)
    • 哦,我误会了 - 以为您建议使用短路来替代 any
    【解决方案4】:
    'value2' in (item for sublist in mylist for item in sublist)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-21
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多