代码之家  ›  专栏  ›  技术社区  ›  Bijan

根据条件从二维列表创建列表

  •  1
  • Bijan  · 技术社区  · 8 年前

    我有一个Python中的2D数组,设置如下

    MY_ARRAY = [
        ['URL1', "ABC"],
        ['URL2'],
        ['URL3'],
        ['URL4', "ABC"]
    ]
    

    我只想在第二个参数为“ABC”时,由每个数组的第一个元素组成一个数组。因此,上述示例的结果将是 ['URL1', 'URL4']

    我试过了 [x[0] for x in MY_ARRAY if x[1] == 'ABC'] 但这又回来了 IndexError: list index out of range 我认为这是因为有时 x[1]

    我希望这是一个简单的一行。

    5 回复  |  直到 8 年前
        1
  •  2
  •   miradulo    8 年前

    您只需首先在过滤条件中添加长度检查。这是因为Python短路了布尔表达式。

    [ele[0] for ele in MY_ARRAY if len(ele) > 1 and ele[1] == 'ABC']
    

        2
  •  2
  •   Jomark    8 年前

    我认为你应该尝试这样做:

    if len(x) > 1:
        if x[1] == 'ABC':
            #do something here
    

    if len(x) > 1 and x[1] == "ABC"
    

    干杯

        3
  •  1
  •   viveksyngh    8 年前

    试试这个

    [x[0] for x in MY_ARRAY if len(x) > 1 and x[1] == 'ABC']
    

    这是因为您有两个列表,其中只有一个项目,并且您正试图访问该列表中的第二个项目

        4
  •  1
  •   Ofer Sadan    8 年前

    x[1] 不存在,你会出错

    但是,如果事情复杂化,坚持一行一行的做事是一个坏习惯。

    NEW_ARRAY = [x[0] for x in MY_ARRAY if len(x)>1 and x[1]=='ABC']
    
        5
  •  0
  •   Bijan    8 年前

    [x[0] for x in MY_ARRAY if x[-1] == 'ABC']
    

    x[-1] 将始终存在,因为这是数组/列表中的最后一个元素。