在列表中查找字符串值并替换它们

时间:2015-10-21 13:34:18

标签: python list replace

我有一个列表,其中包含以未知顺序混合的浮点数,整数和字符串。我想找到所有字符串值并将其替换为0.问题是我不知道这个字符串会是什么样子,除了它将包含4个字符(十六进制数字)。

例如,我将有这样一个列表:

h = [1, 2, 5.3, '00cc', 3.2, '085d']

我想用零替换这些字符串(在此示例中' 00cc'和#39; 085d'),以便我的最终列表如下所示:

h = [1, 2, 5.3, 0, 3.2, 0]

我知道在列表中查找字符串或值的方法并替换它,但在我只知道列表元素的类型和长度的情况下不会。

5 个答案:

答案 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]