2017-12-13 1 views
0

목록에서 n 번째 용어 - (n-1) 번째 용어를 찾는 방법을 알고 싶습니다. 나는 그것이 매우 간단해야한다는 것을 알고 있지만, 나는 단지 응용 프로그램에 문제가 있습니다. 따라서 [0, 2, 4, 6, 5]의 입력이 제공되면 함수는 [0, 2, 2, 2, -1]을 리턴해야합니다. 왜이 작품파이썬에서 n 번째 (n-1) 번째 용어를 취하는 방법?

def cost_to_diff (stocks): 
    for i in range(i+1): 
     stock[i] = stock[i] - stock[i-1] 
     print stock 

의도하지 않는 한 다음과 같이 내 솔루션 (이 작동하지 않습니다)입니까?

+0

중복 가능성을 - https://stackoverflow.com/questions/24614361/finding-the-difference-between-consecutive-numbers-in-a-list-python#24742315 당신은 내가에서'어떻게 생각 했 – GaneshTata

+0

범위 (i + 1)'이 효과가 있습니까?값은 같은 줄에 사용 및 정의 할 수 없습니다. –

+2

[목록에서 연속 된 숫자의 차이 찾기 (Python)] (https://stackoverflow.com/questions/24614361/finding-the-difference- 사이 - 연속 숫자 -리스트 - 파이썬) – styvane

답변

2

실수로 목록의 i 번째 요소를 재설정하므로 다음주기 반복시 변경된 값에 액세스 할 수 있습니다. 당신이 목록을 인쇄하려면

이 또한 I가 numpy을 시도 할 조언을 다음

def cost_to_diff (stocks): 
    diff = [] 
    for i in range(1, len(stocks)): 
     diff.append(stocks[i] - stocks[i-1]) 
    print diff 

또는

def cost_to_diff (stocks): 
    print [stocks[i] - stocks[i-1] for i in range(1, len(stocks))] 

을, 당신은

def cost_to_diff (stocks): 
    for i in range(1, len(stocks)): 
     print stocks[i] - stocks[i-1] 

을 필요 인쇄됩니다 그러한 작업. This function이 작업을 수행합니다. 특히 주식 데이터를 가지고 놀고 있다면, numpy는 목록보다 훨씬 빠릅니다. 또한 주식 데이터의 경우 일반적으로 데이터 프레임을 사용하므로 pandas이 학습에 필요하며 Series.diff은 필요한 기능입니다.

0

잘못된 범위를 사용하고 있습니다. 주식 목록의 길이를 알아 내고 그에 따라 범위를 만들어야합니다.

differences = [] 
for i in range(len(stocks) - 1): 
    differences.append(stock[i+1] - stock[i]) 
    print differences 

그러나 더 좋은 방법이 있습니다. 파이썬에는 이러한 종류의 작업을 쉽게 수행 할 수 있도록 여러 내장 함수가 있습니다. zip 함수를 사용하여 색인을 어지럽히 지 않고 요소를 가져옵니다. 예를 들어

differences = [] 
for a, b in zip(l, l[:1]): 
    differences.append(b-a) 

:

my_list = [0, 3, 4, 5, 7] 
print zip(my_list, my_list[1:]) 

이 출력을 생성

[(0, 3), (3, 4), (4, 5), (5, 7)] 

당신이 요소를 차감 한 후해야 할 일은.

+0

이후에 이전의'stock' 값을 필요로하지 않는다고 가정하면 현명하고 우아합니다. –

+0

이것은 목록 ** in-place **를 변경하여 다음과 같이'[2, 2, 2, -1, 5]'를 생성합니다. '[0, 2, 2, 2, -1]'. – GaneshTata

+0

맞아요, 그 문제를 해결하기 위해 내 대답을 편집했습니다. –

0

다음 코드는 [2, 2, 2, -1]을 반환합니다. 왜냐하면 첫 번째 요소가 0이되는 이유가 없기 때문입니다.

첫 번째 -1 요소도 0이라고 가정합니까?

len('list')은 목록의 길이를 알려줍니다.

range(start, end)은 범위를 제공합니다.

두 번째 요소 (index = 1)의 for 루프에서 반복을 시작하기 때문에 start가 1이되고 end가 주식 목록의 길이가됩니다.

stock = [0,2,4,6,5] 
result = []#create an empty list for the results 
for i in range(1,len(stock)):#set the iteration steps, will be 1,2,3,4 in this case 
    result.append(stock[i] - stock[i-1])#By using stack[i] = ... you will overwrite the ith element 
print result 
관련 문제