【问题标题】:In Python: How to use the index number in an if-statement that is nested in a for-loop?在 Python 中:如何在嵌套在 for 循环中的 if 语句中使用索引号?
【发布时间】:2018-06-11 22:02:35
【问题描述】:

我的问题是我有一个包含两个向量的模拟数据集。因此,我有一个向量 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。然后我想在 vN 向量中获得 vY 的相应值,即 vN = [25,12,3]。 希望有人理解这个问题并能够帮助我。先感谢您。

【问题讨论】:

    标签: python for-loop if-statement


    【解决方案1】:

    使用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]
    

    【讨论】:

    【解决方案2】:

    使用 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)
    

    【讨论】:

      【解决方案3】:
      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)
      

      【讨论】:

        猜你喜欢
        • 2012-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 2020-11-25
        • 1970-01-01
        • 2012-07-25
        • 2016-10-30
        相关资源
        最近更新 更多