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个元组的比较。