如何在Python中选择满足某些条件的列表的元素对?

时间:2015-08-25 14:26:16

标签: python

给出一个列表,我如何选择满足某些标准的元素对? 我知道线性搜索算法可以达到这个目的:

b = []
for i in range(len(a)-1):
    for j in range(i+1,len(a)):
        if isTrue(a[i],a[j]):
            b.append([a[i],a[j]])

任何更好的解决方案都能提高效率吗?

更新

@ scytale的评论激发了我一个解决方案。但它不可能是完美的。

例如,a = [1.2,3.1,0.3,4.2,5.6,2.7,1.1]。我希望得到总和小于3的元素对。

b = [(x,y) for x in a for y in a if (x+y)<3 and x!=y]

这将给出重复的对:

[(1.2,0.3),(1.2,1.1),(0.3,1.2),(0.3,1.1),(1.1,1.2),(1.1,0.3)]

但我想要的是:

[(1.2,0.3),(1.2,1.1),(0.3,1.1)]

1 个答案:

答案 0 :(得分:4)

如何使用combinationsfilter

from itertools import combinations

c = combinations(a, 2)
f = filter(lambda x, y: isTrue(x, y), c)

或使用列表理解:

result = [(x, y) for x, y in c if isTrue(x, y)]