【问题标题】:Remove an element from a str从 str 中删除一个元素
【发布时间】:2020-10-05 18:56:36
【问题描述】:

我有一个列表,我在其中添加这样的元素:

listA.append('{:<30s} {:>10s}'.format(element, str(code)))

所以 listA 看起来像这样:

Paris          75
Amsterdam      120
New York City  444 
L.A            845

我现在想从这个 listA 中将元素添加到“listB”列表中,而不需要代码。我想这样做:

for i in listA:
    listB.append(i - str(code))   #that's what i want to do. The code is not good

我希望 listB 看起来像这样:

    Paris
    Amsterdam 
    New York City
    L.A

并且仅使用 listA 并且无法访问“元素”和“代码”

有人可以帮助我吗?

【问题讨论】:

  • 不太明白,需要说明
  • 您根本没有在第二个循环中使用ielementcode 来自哪里?
  • 听起来你可能正在寻找这个:How to remove specific substrings...in Python
  • 不确定我是否完全理解你,但你为什么不在你构建 listA 之后立即构建 listB,比如 - listB.append(element)?
  • @MilanCermak 我换了帖子

标签: python string list


【解决方案1】:

无需任何新库的最简单方法。

您可以创建一个有 40 个空格的变量(因为格式子句中有 40 个空格)。例如:space_var = " " 然后使用以下代码从listA中提取元素:

listB=[]
for i in listA:
    listB.append(listA[0].rsplit(space_var,1)[0])

【讨论】:

    【解决方案2】:

    如何使用re.sub?与其使用for in,不如使用map 功能样式或[for in] 列表理解:

    import re
    listB = list(map(lambda x: re.sub(r"\s+\d+", "", x), listA))
    

    或者,甚至更好

    import re
    listB = [re.sub(r"\s+\d+", "", x) for x in listA]
    

    关于正则表达式的一点点:

    • re.sub - 是一个搜索和删除所有出现的第一个参数到第二个第三个参数的函数
    • r"\s+\d+" - 是一个'raw' string literal,里面有正则表达式
    • \s+ - 一个或多个空格(\t\n\r 等)
    • \d+ - 一位或多位数字(\d[0-9] 的别名)
    • 有关正则表达式的更多信息,请使用this documentation page

    【讨论】:

      【解决方案3】:

      您可以尝试以下方法:

      listB = [element.rsplit(' ', maxsplit=1)[0].rstrip() for element in listA]
      

      rsplit(' ', maxsplit=1) 表示您将从右侧的第一个空格处拆分 listA 的元素一次。额外的rstrip() 将从右侧删除其他空格。

      【讨论】:

        【解决方案4】:

        这似乎对我有用

        listB=[]
        for i in listA:
            listB.append(listA[0][:len(element)])
        print(listB)
        

        【讨论】:

          【解决方案5】:

          试试这个:

          import re
          listB = [re.sub('\d+', '', x).strip() for x in listA]
          print(listB)
          

          输出:

          ['Paris', 'Amsterdam', 'New York City', 'L.A']
          

          【讨论】:

            【解决方案6】:

            你可以使用正则表达式

            import re
            
            for i in listA:
                listB.append(re.sub(r"\W+\d+", "", i))
            

            这将删除数字代码及其前面的空格。

            【讨论】:

              猜你喜欢
              • 2020-10-03
              • 2014-10-22
              • 1970-01-01
              • 2012-06-19
              • 2011-08-16
              • 1970-01-01
              • 2023-03-22
              • 1970-01-01
              相关资源
              最近更新 更多