홈>
저는 초보자 파이썬 사용자입니다. 여러 이웃에 걸쳐 구성 요소를 평균하여 수레 목록을 '평활화'하는 함수를 정의하려고합니다.
내 코드 :
import random
random.seed(1)
def moving_window_average(x, n_neighbors=1):
width = n_neighbors*2 + 1
y = list()
for i in range(n):
y.append(sum(x[i+t])/width for t in range(-n_neighbors,n_neighbors))
return y
x=[0,10,5,3,1,5]
avg=moving_window_average(x, 1)
print(avg)
출력에서 나는 '제너레이터'의 목록으로 보이는 것을 얻습니다. 광고가 예상하지 못한 것입니다. 특히 :
[<generator object moving_window_average.<locals>.<genexpr> at 0x7f57f992aba0>, <generator object moving_window_average.<locals>.<genexpr> at 0x7f57f992ab48>, <generator object moving_window_average.<locals>.<genexpr> at 0x7f57f992a728>, <generator object moving_window_average.<locals>.<genexpr> at 0x7f57f992aa98>, <generator object moving_window_average.<locals>.<genexpr> at 0x7f57f992aa40>, <generator object moving_window_average.<locals>.<genexpr> at 0x7f57f992a9e8>]
누군가가 여기서 일어나고있는 일을 알려줄 수 있습니까?
감사합니다
-
답변 # 1
-
답변 # 2
제너레이터는 반복 될 때 소모되는 반복 가능한 요소입니다. 이것이
sum(x[i+t])/width for t in range(-n_neighbors,n_neighbors)
문으로 작성하는 것입니다. . 원하는 것이 목록의 목록이면 올바른 설명은[sum(x[i+t])/width for t in range(-n_neighbors,n_neighbors)]
입니다. , 대신 목록 이해입니다. 말하자면 목록의 인라인 생성입니다.주제에서 찾은 기사는 여기에서 찾을 수 있습니다. 읽어보십시오.
-
답변 # 3
생성자 표현식을 발견했습니다.이 표현식은 이해력이있는 목록 구문에 통합되어 있지만 많은 실수를 일으 킵니다.
예를 들면 :
x=[0,10,5,3,1,5] (y for y in x) Out[19]: <generator object <genexpr> at 0x000000000C02FEB8> [y for y in x] Out[20]: [0, 10, 5, 3, 1, 5] print(y for y in x) <generator object <genexpr> at 0x000000000C02FE60> print((y for y in x)) <generator object <genexpr> at 0x000000000BFA1938> print(*(y for y in x)) 0 10 5 3 1 5 [(y for y in x)] Out[24]: [<generator object <genexpr> at 0x000000000BFA1D58>] list(y for y in x) Out[25]: [0, 10, 5, 3, 1, 5]
귀하의 경우
[]
를 추가하여 문제를 해결할 수 있다고 생각합니다. 당신의 표정을 소리 내십시오 :y.append([sum(x[i+t])/width for t in range(-n_neighbors,n_neighbors)])
[]
생성기가 값을 평가하도록합니다. Generator는 메모리를 절약하고 실행을 지연시키는 데 사용되는 강력한 개체입니다. 당신의 목표가 아닙니다.
관련 자료
- python - 왜이 목록이"때때로"만 이해 되는가?
- 이 json 파일을 파이썬으로로드 할 수없는 이유는 무엇입니까?
- python 3.x - 이 목록을이 함수의 매개 변수로 어떻게 사용합니까?
- html - 이 코드가 워드 프레스 페이지에 표시되지 않는 이유는 무엇입니까?
- c - 이 버블 정렬에 문제가있는 이유는 무엇입니까?
- javascript - 이 코드를 기다리는데 왜 then을 사용할 수 없습니까?
- excel - = sumif (c5 - c19, not (isformula (c5 : c19)))가 0을 반환하는 이유는 무엇입니까?
- powershell - 이 예제에서 대괄호가 필요한 이유는 무엇입니까?
- Ruby book의이 코드가 작동하지 않는 이유는 무엇입니까?
- javascript - 왜이 DOM 코드가 페이지에 나타나지 않습니까?
- c++ - 왜 boost - : none을 nvcc로 컴파일하지 못합니까?
- angular - 이 어레이가 정의되지 않은 이유와 해결 방법은 무엇입니까?
- python - 이 json 데이터가로드되지 않는 이유는 무엇입니까?
- multithreading - 왜이 C 코드가 경쟁 조건을 유발합니까?
- javascript - 내 기능에이 IF 문이 필요한 이유는 무엇입니까?
- 상속이 Java에서 왜 이런 식으로 작동합니까?
- reactjs - 왜 이것이 TypeError가 발생합니까?
- python - 이 객체를 호출 할 수없는 이유는 무엇입니까? 개체가 항목입니까 아니면 목록입니까?
- r - 내 목록을 원하는 목록으로 변환하는 방법
- Java가이 클래스에 액세스 할 수없는 이유는 무엇입니까?
관련 질문
- python - 오름차순 값을 기준으로 목록을 필터링하는 방법은 무엇입니까?
- list - Python에서 행렬의 특정 요소 찾기
- python - 'FTR'열의 'H'수를 어떻게 계산합니까?
- python - 함수에서 튜플 풀기 목록 가져 오기
- python - 특정 패턴을 가진 튜플 목록
- python - 기본 인수가 함수에 전달되지 않은 경우 None을 빈 목록으로 변환하는 대부분의 Pythonic 방법?
- python - 두 목록의 여러 값을 포함하는 키로 사전을 만들려면 어떻게해야합니까?
- python - 모바일 숫자 시퀀스를 실제 문장으로 변환하는 데 도움이 필요합니다
- python - 주어진 인덱스 배열에서 목록의 요소를 어떻게 팝할 수 있습니까?
- python - 여러 목록 중에서 원하는 값이 포함 된 목록을 어떻게 찾고 반환합니까?
문제는 데이터를 "평활화"하기 위해 사용하는 표현식이 잘못 작성되어 생성기 표현식이라고하는 것으로 평가된다는 것입니다. 아래 코드가 올바른 표현 방법이라고 생각합니다.