Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何选择满足某些条件的列表元素对?_Python - Fatal编程技术网

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

在Python中,如何选择满足某些条件的列表元素对?,python,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,

给出一个列表,如何选择满足某些条件的元素对? 我知道线性搜索算法可以实现这一点:

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.1)]

如何使用
组合
过滤器

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)]

如何使用
组合
过滤器

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)]

我更新时可能重复,我无法获得非重复结果…请使用搜索:我更新时可能重复,我无法获得非重复结果…请使用搜索:最后一个脚本很棒。至于过滤器,为什么在使用“f=filter(lambda x,y:x+y<3,c)”时会出现“lambda正好取两个参数…”的错误?最后一个脚本很棒。至于过滤器,为什么在使用“f=filter(lambda x,y:x+y<3,c)”时会出现“lambda正好取两个参数…”的错误?