파이썬에서 "필터" 개체의 길이를 찾는 방법
>>> n = [1,2,3,4]
>>> filter(lambda x:x>3,n)
<filter object at 0x0000000002FDBBA8>
>>> len(filter(lambda x:x>3,n))
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
len(filter(lambda x:x>3,n))
TypeError: object of type 'filter' has no len()
저는 제가 받은 목록의 길이를 알 수 없었습니다.그래서 변수에 저장하려고 했어요, 이런 식으로...
>>> l = filter(lambda x:x>3,n)
>>> len(l)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
len(l)
TypeError: object of type 'filter' has no len()
루프를 사용하는 대신에, 이것의 길이를 알 수 있는 방법이 있습니까?
필터 개체를 통해 어떻게든 반복해야 합니다.한 가지 방법은 목록으로 변환하는 것입니다.
l = list(filter(lambda x: x > 3, n))
len(l) # <--
하지만 그것은 사용의 요점을 좌절시킬 수도 있습니다.filter()
우선, 당신은 목록 이해로 이것을 더 쉽게 할 수 있기 때문에:
l = [x for x in n if x > 3]
다시.len(l)
길이를 반환합니다.
이것은 오래된 질문이지만, 저는 이 질문이 지도 축소 이념을 이용한 답이 필요하다고 생각합니다.자, 여기 있습니다.
from functools import reduce
def ilen(iterable):
return reduce(lambda sum, element: sum + 1, iterable, 0)
ilen(filter(lambda x: x > 3, n))
이것은 만약에 특히 좋습니다.n
컴퓨터 메모리에 맞지 않습니다.
필터를 목록으로 변환하려면 추가 메모리가 필요하며, 이는 대용량 데이터에서는 허용되지 않을 수 있습니다.의 길이를 찾을 수 있습니다.filter
객체를 a로 변환하지 않고 객체list
:
sum(1 for _ in filter(lambda x: x > 3, n))
일반적으로.filter
그리고.reduce
비단뱀이 아닙니다.
@arshaji는 이 해결책을 언급했습니다.
len([x for x in n if x > 3])
이것은 매우 간단하지만 정확히 무엇을 하고 싶은지 설명하지 않으며 추가 메모리를 사용할 수 있는 목록을 만듭니다.더 나은 솔루션은sum
제너레이터 포함:
sum(1 for x in n if x > 3)
(여기에서 제너레이터에 대한 자세한 내용을 참조하십시오. https://www.python.org/dev/peps/pep-0289/ #http://) )
하지만,sum
대부분의 경우 구현(CPython 3.6.4에서 테스트됨) 때문에 제너레이터를 사용하면 실제로 속도가 느려집니다.
In [1]: %timeit len([1 for x in range(10000000)])
356 ms ± 17.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [2]: %timeit sum(1 for x in range(10000000))
676 ms ± 7.05 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
파이썬 3의 문서에 따르면 반복기를 반환합니다.
"함수가 참으로 반환되는 반복 가능한 요소로 반복기를 구성합니다."
python 2에서는 목록을 반환했습니다. 여기를 참조하십시오.필터 개체의 길이를 확인하려면 필터 개체를 반복해야 합니다.
더 많은 반복적인 도구를 사용하여 해결할 수 있습니다.
from more_itertools import ilen
f = filter(lambda x:x>3,n)
return ilen(f)
참고:ilen
필터를 사용합니다(이후에는 사용할 수 없습니다. 빈 목록을 반환합니다).
언급URL : https://stackoverflow.com/questions/19182188/how-to-find-the-length-of-a-filter-object-in-python
'source' 카테고리의 다른 글
[파일로 이동...]이 있습니까? (0) | 2023.05.31 |
---|---|
루비로 파일을 이동하려면 어떻게 해야 합니까? (0) | 2023.05.31 |
Choosing MongoDb/CouchDb/RavenDb - performance and scalability advice (0) | 2023.05.26 |
Linux 시스템에 연결된 모든 저장 장치 찾기 (0) | 2023.05.26 |
DataContext 속성을 사용하여 XAML의 창에 ViewModel을 설정하려면 어떻게 해야 합니까? (0) | 2023.05.26 |