Итерация по массиву в прыжках - PullRequest
0 голосов
/ 26 марта 2020

У меня есть массив, из которого мне нужны только value[1], value[4], value[7], value[10], value[13] и value[16] (так что в основном каждое третье значение после пропуска value[0]).

Мне нужно составить уравнение с каждым из этих значений и вернуть каждый ответ в массив. Функция, которую я написал, однако, не делает скачки 3 и вместо этого использует каждое значение. Как бы это исправить?

popt=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] #I only want to use popt[1],popt[4],popt[7] etc. 

def d(popt):
  dvalues=[]
  i=1
  for i in range(0, len(popt)//3):
      d=wavelength()/(2 * math.sin(math.radians(popt[i] / 2)))
      dvalues.append(d)
      I+=3
  return(dvalues)
print(d(popt))

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Вам нужно:

for i in range(1, len(popt), 3):
0 голосов
/ 26 марта 2020

Вот еще один подход, который использует:

Пример кода:

import math

def d(popt):
    # I don't have your `wavelength()` function, so have used 1. 
    vals = [1 / (2 * math.sin(math.radians(i / 2))) for i in popt]
    return vals

# Create a list of every 3 numbers from 1-18. 
popt = [i for i in range(1, 18)][::3]
output = d(popt)

Вывод:

# Using 1, rather than your wavelength() function.
[57.296506740065155,
 14.326854173921912,
 8.19020411969913,
 5.736856622834928,
 4.416835735998784,
 3.5926482671638595]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...