在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正好取两个参数…”的错误?