过滤Python列表

时间:2015-10-25 12:26:30

标签: python list

我在Python中有一个如下所示的列表:

myarray = [('31.10', 'John', 'Smith', 'ZK'),('01.11', 'John', 'Smith', 'OK'),('31.10', 'John', 'Doe', 'ZK'),('01.11', 'John', 'Doe', 'ZK')]

我想按2键过滤。 2个名称键。

离。过滤myarray包含John和Doe得到:

01.11 John Doe ZK
31.10 John Doe ZK 

2 个答案:

答案 0 :(得分:1)

您需要测试列表中的每个元组:

for entry in myarray:
    if entry[1:3] == ('John', 'Doe'):
        print ' '.join(entry)

我使用切片来选择那里的索引12的部分,但你也可以使用元组解包:

for num1, first, last, token in myarray:
    if (first, last) == ('John', 'Doe'):
        print num1, first, last, token

或者如果元组相等并不清楚它的作用,请使用单独的比较和and

for num1, first, last, token in myarray:
    if first == 'John' and last == 'Doe':
        print num1, first, last, token

答案 1 :(得分:1)

这里有很好的讨论原则: List filtering: list comprehension vs. lambda + filter

稍微适应您的问题:

def filterbyvalue(seq, position, value):
   for el in seq:
       if el[position]==value: yield el

myarray = [('31.10', 'John', 'Smith', 'ZK'),('01.11', 'John', 'Smith', 'OK'),('31.10', 'John', 'Doe', 'ZK'),('01.11', 'John', 'Doe', 'ZK')]

results = filterbyvalue(myarray, 2, "Doe")
for x in results:
    print(x)

filterbyvalue函数返回一个生成器,可以正常调用。