【问题标题】:variable size array matching可变大小数组匹配
【发布时间】:2015-10-24 13:58:20
【问题描述】:

我有一个根据第一列排序的数据文件

1 3 2
3 6
4 8 5 6 2
4 9
5 2 2

我想在上面的数组中搜索一个包含三个项目的键,比如seen = [4 8 5]。由于某些行少于三列,以下代码无法比较,我知道

take = [row for row in lines if row[0] == seen[0] and row[1] == seen[1] and row[2] == seen[2]]

那么对于少于三列的行我该怎么办呢?

【问题讨论】:

    标签: python arrays list python-3.x


    【解决方案1】:

    使用切片,您无需手动检查所有 3 项和检查长度:

    take = [row for row in lines if row[:3] == seen]
    

    【讨论】:

    • 一个方便的filter表达式的好机会:take = filter(lambda row: row[:3] == seen, lines)
    • @Falko,在 Python 3.x 中,您需要用 list 包装它以获取列表对象,因为 filter 返回的是迭代器而不是列表:take = list(filter(lambda row: row[:3] == seen, lines))
    【解决方案2】:

    添加一个守卫(len(row) >= 3):

    take = [row for row in lines if len(row) >= 3 and row[0] == seen[0] and row[1] == seen[1] and row[2] == seen[2]]
    

    如果行没有足够的元素,这将使检查短路(并失败)

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2016-09-17
      • 2018-07-29
      • 2017-06-16
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多