在Matlab中,我可以这样做:
s1 = 'abcdef'
s2 = 'uvwxyz'
s1(1:2:end) = s2(1:2:end)
s1 is now 'ubwdyf'
这只是将军的一个例子:
A(I) = B
其中A,B是向量,I索引向量和B长度与I相同。(暂时忽略矩阵)。
Python中一般情况的pythonic等价物是什么?最好它也应该运行在jython / ironpython(没有numpy)
编辑:我使用字符串作为一个简单的例子,但是带有列表的解决方案(已经发布,哇)就是我想要的。感谢。
答案 0 :(得分:6)
>>> s1 = list('abcdef')
>>> s2 = list('uvwxyz')
>>> s1[0::2] = s2[0::2]
>>> s1
['u', 'b', 'w', 'd', 'y', 'f']
>>> ''.join(s1)
'ubwdyf'
主要区别是:
[start : stop : step]
,其中所有参数都是可选的。答案 1 :(得分:1)
字符串在Python中是不可变的,因此我将在我的示例中使用列表。
您可以像这样分配切片:
a = range(5)
b = range(5, 7)
a[1::2] = b
print a
将打印
[0, 5, 2, 6, 4]
这仅适用于具有恒定增量的切片。对于更通用的A[I] = B
,您需要使用for循环:
for i, b in itertools.izip(I, B):
A[i] = b
答案 2 :(得分:0)
NumPy数组可以使用任意列表编制索引,就像在Matlab中一样:
>>> x = numpy.array(range(10)) * 2 + 5
>>> x
array([ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23])
>>> x[[1,6,4]]
array([ 7, 17, 13])
和任务:
>>> x[[1,6,4]] = [0, 0, 0]
>>> x
array([ 5, 0, 9, 11, 0, 15, 0, 19, 21, 23])
不幸的是,我认为没有numpy可以获得这个,所以你只需要为那些循环。