查找和replace列表中的元素(python)
我必须search一个列表,并用另一个元素replace所有出现的元素。 到目前为止,我的代码尝试让我无处可去,最好的方法是什么?
例如,假设我的列表具有以下整数
>>> a = [1,2,3,4,5,1,2,3,4,5,1]
我需要用数值10replace所有出现的数字1,所以我需要的输出是
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
因此,我的目标是将数字1的所有实例replace为数字10。
>>> a=[1,2,3,4,5,1,2,3,4,5,1] >>> for n,i in enumerate(a): ... if i==1: ... a[n]=10 ... >>> a [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
尝试使用列表理解和三元运算符 。
>>> a=[1,2,3,1,3,2,1,1] >>> [4 if x==1 else x for x in a] [4, 2, 3, 4, 3, 2, 4, 4]
列表理解工作得很好 – 并且枚举循环可以为您节省一些内存(B / C操作本质上是在做的)。
还有function性编程…查看地图的用法:
>>> a = [1,2,3,2,3,4,3,5,6,6,5,4,5,4,3,4,3,2,1] >>> map(lambda x:x if x!= 4 else'sss',a) [1,2,3,4,5,5,6,5,5,'sss',5,'sss',3,'sss',3,2,1]
>>> a=[1,2,3,4,5,1,2,3,4,5,1] >>> item_to_replace = 1 >>> replacement_value = 6 >>> indices_to_replace = [i for i,x in enumerate(a) if x==item_to_replace] >>> indices_to_replace [0, 5, 10] >>> for i in indices_to_replace: ... a[i] = replacement_value ... >>> a [6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6] >>>
如果您有多个要replace的值,则还可以使用字典:
a = [1, 2, 3, 4, 1, 5, 3, 2, 6, 1, 1] dic = {1:10, 2:20, 3:'foo'} print([dic[n] if n in dic else n for n in a]) > [10, 20, 'foo', 4, 10, 5, 'foo', 20, 6, 10, 10]
以下是Python 2.x中的一个非常直接的方法
a = [1,2,3,4,5,1,2,3,4,5,1] #Replacing every 1 with 10 for i in xrange(len(a)): if a[i] == 1: a[i] = 10 print a
这个方法有效。 欢迎评论。 希望它有助于:)
另外尝试了解outis和damzam的解决scheme是如何工作的。 列表压缩和lambda函数是很有用的工具。