python用整数替换列表中的字符串

时间:2017-05-20 01:53:10

标签: python python-2.7 python-3.x

我有一个列表,其索引大多是整数,但偶尔会有一些'X'条目。 我需要所有条目来使用此列表和另一个列表执行列表操作。如何用整数零替换字符串的'X'条目,同时保持列表的长度相同。

我尝试使用if语句替换条目,如果它是'X',但这只是给了我一个类型错误。

示例:将[X,X,52,39,81,12,X,62,94]更改为[0,0,52,39,81,12,0,62,94] 其中第二个列表中的所有条目都是int。

3 个答案:

答案 0 :(得分:4)

尝试使用map执行此操作:

>>> l= ['X','X',52,39,81,12,'X',62,94]
>>>
>>> map(lambda x:0 if x=="X" else x,l)
[0, 0, 52, 39, 81, 12, 0, 62, 94]

如果您使用的是Python3.x,map()会返回迭代器,因此您需要使用list(map())将其转换为列表。

或使用列表理解:

>>> [i if i!='X' else 0 for i in l]
[0, 0, 52, 39, 81, 12, 0, 62, 94]

答案 1 :(得分:2)

首先,您需要改进术语的使用。索引都是整数,它是字符串和整数混合的元素。

解决方案

l = ['X', 'X', 52, 39, 81, 12, 'X', 62, 94]
l = [0 if element == 'X' else element for element in l]
print(l)

更好的性能解决方案,具有就地替换

l = ['X', 'X', 52, 39, 81, 12, 'X', 62, 94]
for i in range(len(l)):
  l[i] = 0 if l[i] == 'X' else l[i]
print(l)

答案 2 :(得分:0)

如果需要考虑表现,可以使用numpy

>>> import numpy as np
>>> a=np.array(['X','X',52,39,81,12,'X',62,94])
>>> a[a=='X']=0
>>> a
array(['0', '0', '52', '39', '81', '12', '0', '62', '94'], 
      dtype='|S2')

然后,如果你想要所有的整体:

>>> a.astype(int)
array([ 0,  0, 52, 39, 81, 12,  0, 62, 94])