В Python: Как использовать индексный номер в операторе if, который вложен в цикл for? - PullRequest
0 голосов
/ 11 июня 2018

Мой вопрос касается того факта, что у меня есть имитированный набор данных, который содержит два вектора.Следовательно, у меня есть вектор vX и вектор vY.Проблема, которую я привожу, является примером, который напоминает мои проблемы, так как мой основной код слишком длинный.Он написан как функция, так как это то, что мне нужно в конце.

Проблема в том, что мои векторы упорядочены.Таким образом, элемент vX [0] должен соответствовать vY [0] и так далее.Идея состоит в том, что мне нужны все элементы vX, которые находятся в определенном интервале, получить их индекс и заполнить новый вектор соответствующими значениями vY.

До сих пор я писал это:

vX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
vY = [2, 14, 25, 12, 3, 52 , 5, 10, 7, 19]

vN = []

def(rndf(X, Y)):
    for i in X:
        if i in range(3, 6):
            vN.append(vY[i])
        else:
            vN = vN

vnY = rndf(vX, vY)

В этом случае выражение if верно только для vX = 3, 4 и 5. Тогда я хочу получить соответствующие значения дляvY в векторе vN, т.е. vN = [25, 12, 3].Надеюсь, кто-то поймет проблему и сможет мне помочь.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 июня 2018
vX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
vY = [2, 14, 25, 12, 3, 52 , 5, 10, 7, 19]
vXvY = list(zip(vX, vY))

vn = [x[1] for x in vXvY if x[0] in range(3,6)]
print(vn)
0 голосов
/ 11 июня 2018

С NumPy:

# -*- coding: utf-8 -*-

import numpy as np

vX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
vY = [2, 14, 25, 12, 3, 52 , 5, 10, 7, 19]

vX = np.asarray(vX)
vy = np.asarray(vY)

vN_ids = np.where((vX >= 3) & (vX <= 6))[0]

vN = vY[vN_ids[0]:vN_ids[-1]]

print (vN)
0 голосов
/ 11 июня 2018

использование enumerate

Пример:

vX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
vY = [2, 14, 25, 12, 3, 52 , 5, 10, 7, 19]    

def rndf(X, Y):
    vN = []
    for ind, i in enumerate(X):
        if 3 <= i < 6:                 #better approach as mentioned by FHTMitchell
            vN.append(vY[ind])
    return vN

vnY = rndf(vX, vY)
print( vnY )

Выход:

[25, 12, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...