Python中元组的过滤器列表

Python中元组的过滤器列表,python,python-3.x,Python,Python 3.x,如果元组值大于0.3,我尝试用两个条件筛选元组列表,如果第一个条件满足但不能同时满足这两个条件,则选择的元素不应超过5个 元组列表: list_of_tuple = [(254, 0.9637927264127298), (354, 0.8522503527571762), (32, 0.7816368211562529), (165, 0.7545730507118511), (65, 0.730523154567809), (223, 0.6863456501573775), (

如果
元组值大于0.3,我尝试用两个条件筛选元组列表
如果第一个条件满足
但不能同时满足这两个条件,则选择的元素不应超过5个

元组列表:

list_of_tuple = [(254, 0.9637927264127298),
 (354, 0.8522503527571762),
 (32, 0.7816368211562529),
 (165, 0.7545730507118511),
 (65, 0.730523154567809),
 (223, 0.6863456501573775),
 (263, 0.6630003543540749),
 (357, 0.6322069100774286),
 (383, 0.6134476413586814),
 (252, 0.5608248345843365),
 (31, 0.5123749051906423),
 (347, 0.466326739057893),
 (486, 0.3487919085343739),
 (54, 0.29397783822097),
 (257, 0.23987209993003836),
 (92, 0.22892930134708775),
 (7, 0.20977065219601607),
 (166, 0.19997039737766586),
 (145, 0.15806269571615644),
 (463, 0.1455164252456856),
 (139, 0.14485058856127903),
 (302, 0.14029875929667127),
 (320, 0.12460879531407618),
 (141, 0.12100147679918186),
 (350, 0.12007000240833345)]
预期结果:(因为如果第一个条件
(>=0.3)
满足,这里有5个以上的值),所以只得到前5个

a = [(254, 0.9637927264127298),
 (354, 0.8522503527571762),
 (32, 0.7816368211562529),
 (165, 0.7545730507118511),
 (65, 0.730523154567809)]
我试过了

a = [item  for item in list_of_tuple if (item[1]>=0.3) and len(list_of_tuple)<=5]

a=[item for item in list_of u tuple if(item[1]>=0.3)和len(list_of u tuple)这就是你想要的吗

result = list(filter(lambda x: x[1] >= 0.3, list_of_tuple))[:5]
print(x)
请注意,如果您的列表很长,这并不是最佳选择,因为整个列表都是生成的

这对于非常大的列表更好:

from itertools import islice

result = list(islice(filter(lambda x: x[1] >= 0.3, list_of_tuple), 5))
print(result)

itertools
对于这类东西很方便:

from itertools import islice

a = list(islice((item for item in list_of_tuple if item[1] >= 0.3), 5))
print(a)
# [(254, 0.9637927264127298), (354, 0.8522503527571762), (32, 0.7816368211562529), (165, 0.7545730507118511), (65, 0.730523154567809)]

islice
使用生成器表达式不会对列表进行超出必要范围的计算。

您所说的“不工作”到底是什么意思?返回空列表do:
[i for i in list\u of \u of tuple,如果i[1]>=0.3][:5]
您想根据
=0.3
标准筛选单个项目,然后从这些结果中取出前5个。不想在之后进行切片…想将第一个示例作为条件包括在内您的第一个示例不起作用,因为
len(list of tuple)我想这就是我想要的…谢谢或者
list(islice((如果(项[1]>=0.3)),5))
islice
是否处理
过滤器(lambda x:x[1]>=0.3,首先列出元组中的项,然后获取完整列表,然后在第五个停止?。或者它是否发送
过滤器(lambda x:x[1]>=0.3,list of tuple
执行其工作5次?Filter构造并返回一个迭代器,
islice
仅从该迭代器获取前5个元素,因此执行的逻辑不超过获取前5个值所需的逻辑。因此,它本身不发送筛选器执行其工作5次,但它避免了比较所有元组和仅执行exe剪切前5个元组的比较。