由量国防部X_I,其中X -1依赖于位置递增Python列表

问题描述 投票:1回答:2

我有两个等长的名单。我递增列表1的量,但每个条目必须在list2中相应的条目被改装成。

什么我做的是:

for ii in range(len(list1)):
    list1[ii] = (list1[ii]+val) % list2[ii]

有没有更好的方法(可能使用numpy的)?我找不到任何。这些列表很长,所以性能是一个问题。

python python-3.x numpy modulo
2个回答
2
投票

您可以使用enumeratezip减少参与索引量:

for ii, (a, b) in enumerate(zip(list1, list2)):
    list1[ii] = (a + val) % b

这就是说,你可能会更好过只用一个列表理解,以避免完全索引的需要,这样就可以把enumerate只有zip使用,这使得清洁寻找代码(和更快的代码启动):

# Creates a new list and rebinds list1 to it:
list1 = [(a + val) % b for a, b in zip(list1, list2)]

# Or if list1 *must* be modified in place, slice assignment can do that:
list1[:] = [(a + val) % b for a, b in zip(list1, list2)]

请注意,在这两个例子中我改名的listlist1,因为名字的阴影构造list是一个可怕的想法。


1
投票

这是可能使用numpy的

import numpy as np
numpy_list1 = np.array(list1)
numpy_list2 = np.array(list2)

mod_values1 = np.mod(numpy_list1 + val, numpy_list2) 
mod_values2 = np.remainder(numpy_list1 + val, numpy_list2)
mod_values3 = (numpy_list1 + val) % numpy_list2

所有这三个都给出了相同的结果。对于firstsecond文档是在这里。第三种方法是通过在注释中Shadow Ranger建议。

© www.soinside.com 2019 - 2024. All rights reserved.