【问题标题】:Python - Replacing chars within list of stringsPython - 替换字符串列表中的字符
【发布时间】:2019-01-30 00:45:29
【问题描述】:

我正在尝试从以下列表中每个项目的字符 2 到 3 中删除字符“0”:

list1 = ['0x001', '0x002', '0x0a3']

我想要的输出是:

list1 = ['0x1', '0x2', '0xa3']

这是我迄今为止尝试过但没有奏效的方法:

for i in list1:

   if i[2:3] == '0':
        i.replace('0', '')

但这不会改变列表中的项目。先感谢您!

【问题讨论】:

    标签: python string list replace char


    【解决方案1】:

    你可以使用re.sub:

    import re
    list1 = ['0x001', '0x002', '0x0a3']
    new_result = [re.sub('(?<=x)[0]+', '', i) for i in list1]
    

    输出:

    ['0x1', '0x2', '0xa3']
    

    【讨论】:

      【解决方案2】:

      在 Python 中,字符串(字节或 unicode)是不可变的。这意味着你不能改变它,你只能让变量引用一个新的值。

      列表是一个可变对象,因此您可以更改其各个元素。

      你可以在这里做:

      for index, i in enumerate(list1):
          if i[2:3] == '0':
              list1[index] = i[:2] + i[2:].replace('0', '')
      

      (你不能在整个字符串中替换'0',因为你想保留最初的那个)


      坚持可变性:上面的代码修改 list1,而这个:

      list1 = [ i[:2] + i[2:].replace('0', '') for i in list1 ]
      

      将创建一个新列表。

      看看这两个示例代码:

      list1 = ['0x001', '0x002', '0x0a3']
      list2 = list1
      
      for index, i in enumerate(list1):
          if i[2:3] == '0':
              list1[index] = i[:2] + i[2:].replace('0', '')
      
      print(list1, list2)
      

      输出是:

      ['0x1', '0x2', '0xa3'] ['0x1', '0x2', '0xa3']
      

      因为列表已经修改,所以list2指向修改后的列表。但是随着

      list1 = ['0x001', '0x002', '0x0a3']
      list2 = list1
      
      list1 = [ i[:2] + i[2:].replace('0', '') for i in list1 ]
      print(list1, list2)
      

      输出是:

      ['0x1', '0x2', '0xa3'] ['0x001', '0x002', '0x0a3']
      

      因为list1 是一个新列表,而list2 仍然引用原始列表。

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 2013-06-20
        • 2021-05-22
        • 2019-02-26
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 2014-04-09
        • 1970-01-01
        相关资源
        最近更新 更多