带过滤功能的Python列表(excel方式)
我有一个Python列表:带过滤功能的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
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。编辑。谢谢,这太好了。