我有两个等长的名单。我递增列表1的量,但每个条目必须在list2中相应的条目被改装成。
什么我做的是:
for ii in range(len(list1)):
list1[ii] = (list1[ii]+val) % list2[ii]
有没有更好的方法(可能使用numpy的)?我找不到任何。这些列表很长,所以性能是一个问题。
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)]
请注意,在这两个例子中我改名的list
到list1
,因为名字的阴影构造list
是一个可怕的想法。
这是可能使用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
所有这三个都给出了相同的结果。对于first和second文档是在这里。第三种方法是通过在注释中Shadow Ranger建议。