带过滤功能的Python列表(excel方式)

带过滤功能的Python列表(excel方式),python,list,python-2.7,python-3.x,filtering,Python,List,Python 2.7,Python 3.x,Filtering,我有一个Python列表: listx = [["a", 127, "Blue", 0], ["b", 127, "Red", 1], ["b", 127, "Green", 0], ["b", 99, "Green", 1], ["c", 99, "Yellow", 0]] 这是一个表格视图,用于更好地了解情况: 我想做一些过滤功能。例如我想得到一个索引为0=“b”和索引为1=127的列表。因此,结果必须是: list

我有一个Python列表:

listx = [["a", 127, "Blue", 0],
         ["b", 127, "Red", 1],
         ["b", 127, "Green", 0],
         ["b", 99, "Green", 1],
         ["c", 99, "Yellow", 0]]
这是一个表格视图,用于更好地了解情况:

我想做一些过滤功能。例如我想得到一个索引为0=“b”和索引为1=127的列表。因此,结果必须是:

listxnew = [["b", 127, "Red", 1],
            ["b", 127, "Green", 0]]
listxnew的表视图可以更好地了解情况:


那么,如何使用简单的Python代码实现这一点呢?谢谢。

您可以使用列表理解来完成此操作,如下所示:

listxnew = [i for i in listx if i[0:2]==['b', 127]]

>>> print listxnew
[['b', 127, 'Red', 1]
 ['b', 127, 'Green', 0]]

您可以使用列表理解来完成此操作,如下所示:

listxnew = [i for i in listx if i[0:2]==['b', 127]]

>>> print listxnew
[['b', 127, 'Red', 1]
 ['b', 127, 'Green', 0]]

下面是一个易于扩展的解决方案:

def filterls(ls, opts):
    """
    ls - list
    opts - dict - {id: match_info}
    """
    results = []
    for l in ls:
        for (i, t) in opts.items():
            if l[i] != t:
                break
        else:
            results.append(l)
    return results
例如:

listx = [["a", 127, "Blue", 0],
         ["b", 127, "Red", 1],
         ["b", 127, "Green", 0],
         ["b", 99, "Green", 1],
         ["c", 99, "Yellow", 0]]

print filterls(listx, {0: 'b', 1: 127})
# [['b', 127, 'Red', 1], ['b', 127, 'Green', 0]]

下面是一个易于扩展的解决方案:

def filterls(ls, opts):
    """
    ls - list
    opts - dict - {id: match_info}
    """
    results = []
    for l in ls:
        for (i, t) in opts.items():
            if l[i] != t:
                break
        else:
            results.append(l)
    return results
例如:

listx = [["a", 127, "Blue", 0],
         ["b", 127, "Red", 1],
         ["b", 127, "Green", 0],
         ["b", 99, "Green", 1],
         ["c", 99, "Yellow", 0]]

print filterls(listx, {0: 'b', 1: 127})
# [['b', 127, 'Red', 1], ['b', 127, 'Green', 0]]
试用



尝试使用

这不是我想要的方式。有任何定义、函数或类似的东西吗?我将使用它作为GUI。因此,可以过滤的内容可能不止两个、三个或只有一个。@user3051668,我不确定您的确切意思,但您可以轻松地从上面的代码中生成
def
。Sorry@user3051668-检查我的答案是否有效?我很好奇这是否就是你想要的。它是有效的,但我不想为不同的过滤器编写不同的代码。如果我想使用索引0和索引2进行筛选,则列表理解会有所不同。@user3051668您可以将列表理解放在函数中,并基于某些输入(例如您要检查的索引及其所需值)进行筛选。这不是我想要的方法。有任何定义、函数或类似的东西吗?我将使用它作为GUI。因此,可以过滤的内容可能不止两个、三个或只有一个。@user3051668,我不确定您的确切意思,但您可以轻松地从上面的代码中生成
def
。Sorry@user3051668-检查我的答案是否有效?我很好奇这是否就是你想要的。它是有效的,但我不想为不同的过滤器编写不同的代码。如果我想使用索引0和索引2进行筛选,则列表理解会有所不同。@user3051668您可以很容易地将列表理解放入函数中,并根据某些输入(例如要检查的索引及其所需值)打印listnew给我的,我是不是遗漏了什么?@user3051668没有list@sundarnataraj我想ССаааOP正在使用Python3.x。@user3051668:只需将
list(listnew)
放入Python3.x中,就可以查看过滤器正在生成什么+1--这是IMHOprint listnew给我的最好的方式,我是不是遗漏了什么?@user3051668不,它是过滤的list@sundarnataraj我想ССаааOP正在使用Python3.x。@user3051668:只需将
list(listnew)
放入Python3.x中,就可以查看过滤器正在生成什么+1--这是我认为仅适用于Python2.7的最好方式。我在Python3.4中得到了这一点:AttributeError:“dict”对象没有属性“viewitems”@user3051668-是的,在Python3.4中,viewitems只是items。已编辑。谢谢,这很好。我认为这仅适用于Python2.7。我在Python3.4中得到了这一点:AttributeError:“dict”对象没有属性“viewitems”@user3051668-是的,在Python3.4中,viewitems只是items。编辑。谢谢,这太好了。