【发布时间】:2015-11-07 03:19:31
【问题描述】:
我看到列表推导如何擅长返回列表的子集,甚至在没有设置条件的情况下也能全面重新映射。但是,过滤条件将返回列表中的值,该列表可能小于过滤后的列表。如何获取返回值的位置并有条件地更改这些元素?
这是一个简单的例子,
>>> v = ['a' , 'b' , 'c' , 'd' , 'f' , 'k' , 'g' , 'a', 'd']
>>> t = ['a', 'k']
如何修改t 中v 的元素以映射到新值,例如'z',以产生类似
>>> v = ['z' , 'b' , 'c' , 'd' , 'f' , 'z' , 'g' , 'z', 'd']
有很多关于 SO 的问题,来自 Matlab 的人们希望做相当于逻辑索引的操作,但主要只是为了选择元素而不是修改它们如我所愿。为了修改过滤的元素,我想做相当于逻辑索引的操作。
我也刚刚发现我不能同时为 Python 列表提供多个索引。我正在使用 Python 3。
>>> v[ [1,3] ] = 'z'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not list
>>> v[ 1:3 ] = 'z'
>>> v
['a', 'z', 'd', 'f', 'k', 'g', 'a', 'd']
filter 可以为我提供一个可迭代的实际对象,但我不知道如何修改它们指向的元素。
>>> v = ['a' , 'b' , 'c' , 'd' , 'f' , 'k' , 'g' , 'a', 'd']
>>> t = ['a', 'k']
>>> p = filter(lambda x: x in t, v)
>>>
>>> for elem in p :
... print(elem)
...
a
k
a
>>>
>>> for elem in p :
... p = 'z'
...
>>>
>>> for elem in p :
... print(elem)
...
>>>
【问题讨论】:
标签: python mapping list-comprehension