【问题标题】:Find string values in list and replace them在列表中查找字符串值并替换它们
【发布时间】:2016-01-20 12:53:06
【问题描述】:

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

所以例如我会有这样一个列表:

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

我想用零替换这些字符串(在本例中为“00cc”和“085d”),这样我的最终列表将如下所示:

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

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

【问题讨论】:

  • [ x if type(x) is not str else 0 for x in h ]
  • [0 if type(i) is str else i for i in h]

标签: python list replace


【解决方案1】:

如果我没记错的话,最好不要使用is 来检查类型,而应该使用isinstance。我包含 unicode 以防万一,但您可以删除。

[0 if isinstance(i, (str, unicode)) else i for i in h]

【讨论】:

    【解决方案2】:

    我会建议一个列表理解,它可以在一行中简单而干净地测试和替换字符串值。列表推导通过测试你给它的迭代中的每个元素来创建一个新列表。这个测试每个元素的类型并将 str 类型的元素替换为 0。

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

    【讨论】:

      【解决方案3】:

      你可以通过List Comprehensions试试这个:

      [0 if type(i) is str else i for i in h]
      

      【讨论】:

        【解决方案4】:
        for X in xrange(0,len(h)):
            if isinstance(h[X],str): h[X]=0
        

        这里isinstance 检查列表的成员是否属于某种类型(在这种情况下是str 又名string)。该列表已就地修改,没有任何副本。

        【讨论】:

          【解决方案5】:

          你可以这样做:

          h = [1, 2, 5.3, '00cc', 3.2, '085d']
          for i, x in enumerate(h):
              if type(x) == str:
                  h[i]=0
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-09
            • 1970-01-01
            • 2014-08-11
            相关资源
            最近更新 更多