评估列表的组合

2024-10-01 05:06:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助解决一个问题:在每个索引i处使用规则A[i] = A[i] * B[i] + C[i]获取数字列表(所有数字的长度都相同)。在此之后,每个A[i]if A[i] < 0返回-1.0,否则返回1.0。你知道吗

到目前为止我已经

def Vecombine(A, B, C):
    for i in range(len(A)):
        A[i] = A[i] * B[i] + C[i]
        return A[i]
    if A[i] < 0:
        return (-1.0)

我知道我需要添加另一个循环来跟踪最终返回的东西的积极和消极方面,但我只是有点困惑如何做到这一点。我也可能离写这段代码还有一段距离。。。我正在努力,但我只是不完全理解python。你知道吗


Tags: 代码in列表forlenreturnif规则
3条回答

我不认为它会像你想象的那样工作,对于每个A[I],它只会从函数返回。您可以将[i]的值替换为-1.0或1.0,最后返回A,但是一旦第一个索引从函数返回,就完成了。此外,除非格式不正确,否则它将始终返回[0]。也许这就是你想要的。你知道吗

def Vecombine(A,B,C):
    l = []
    for i in range(len(A)):
        A[i]=A[i] * B[i] + C[i]
    if A[i]<0:
        l.append(-1.0)
    else:
        l.append(1.0)
    return l

在函数末尾,l将有[-1.0、-1.0、1.0、1.0等…]

In [84]: %paste
def Vecombine(A,B,C):
  for i,(a,b,c) in enumerate(itertools.izip(A,B,C)):
    A[i] = a*b + c

## -- End pasted text --

In [85]: A = range(1,5)

In [86]: B = range(5,9)

In [87]: C = range(9,13)

In [88]: len(A)==len(B)==len(C)
Out[88]: True

In [89]: A
Out[89]: [1, 2, 3, 4]

In [90]: Vecombine(A,B,C)

In [91]: A
Out[91]: [14, 22, 32, 44]

您可以使用列表理解或生成器

def Vecombine(a, b, c):
    return (-1.0 if i * j + k < 0 else 1.0 for i, j, k in zip(a, b, c))

相关文件:

编辑: 如果你想变异a

def Vecombine(a, b, c):
    for i in xrange(len(a)):
        a[i] = -1.0 if a[i] * b[i] + c[i] < 0 else 1.0

相关问题 更多 >