我有一个列表,其中包含以未知顺序混合的浮点数,整数和字符串。我想找到所有字符串值并将其替换为0.问题是我不知道这个字符串会是什么样子,除了它将包含4个字符(十六进制数字)。
例如,我将有这样一个列表:
h = [1, 2, 5.3, '00cc', 3.2, '085d']
我想用零替换这些字符串(在此示例中' 00cc'和#39; 085d'),以便我的最终列表如下所示:
h = [1, 2, 5.3, 0, 3.2, 0]
我知道在列表中查找字符串或值的方法并替换它,但在我只知道列表元素的类型和长度的情况下不会。
答案 0 :(得分:1)
你可以这样做:
h = [1, 2, 5.3, '00cc', 3.2, '085d']
for i, x in enumerate(h):
if type(x) == str:
h[i]=0
答案 1 :(得分:1)
for X in xrange(0,len(h)):
if isinstance(h[X],str): h[X]=0
此处isinstance
检查列表的成员是否属于某种类型(在这种情况下为str
又称string
)。该列表已就地修改,没有任何副本。
答案 2 :(得分:1)
您可以List Comprehensions尝试此操作:
[0 if type(i) is str else i for i in h]
答案 3 :(得分:1)
我建议使用列表推导,它可以在一行中简单干净地测试和替换字符串值。列表推导通过测试您提供的迭代中的每个元素来创建新列表。这个测试每个元素的类型,并用0替换str类型的元素。
>>> h = [1, 2, 5.3, '00cc', 3.2, '085d']
>>> i = [0 if type(element) == str else element for element in h]
>>> i
[1, 2, 5.3, 0, 3.2, 0]
答案 4 :(得分:1)
如果我没记错,最好不要使用is
来检查类型,而应该使用isinstance
。我包括unicode以防万一,但你可以删除。
[0 if isinstance(i, (str, unicode)) else i for i in h]