【问题标题】:Make changes to a list of strings within a for loop在 for 循环中更改字符串列表
【发布时间】:2021-10-11 04:29:03
【问题描述】:

我有一个看起来像这样的列表["first letter", " second letter", " third letter"]在某些情况下,第一个字符是一个空字符“”。在这些情况下,我想去掉第一个字符并将我的列表修改成这样:

["first letter", "second letter", "third letter"]

我怎样才能做到这一点?这不起作用,因为我没有修改字符串本身,并且每个字符串中可以有超过 1 个 " " 字符。我只想删除第一个。

    for i in setOfCoordinates:
        if i[0] == ' ':
            print('space found')
            i.replace(" ", "")

我不想删除所有空格,只删除第一个

【问题讨论】:

  • for i in setOfCoordinates:。您已经在迭代列表的元素。获取i[0] 将获取元素 的第一个字符。将i[0] 替换为i
  • test = [i.lstrip() for i in setOfCoordinates] 也会删除所有空格。 :)
  • 这是故意的。我想获取第一个字符并检查它是否为空字符。如果它是空的,那么我想把它从@Sujay 剥离
  • 我不想删除所有空格,只删除第一个@user56700
  • [i.lstrip() for i in a] 应该可以完成这项工作

标签: python python-3.x string list for-loop


【解决方案1】:

如果你想删除第一个空格而不是字母后面的空格,你正在寻找str.lremoveprefix()。查看更多信息https://docs.python.org/3/library/stdtypes.html

setOfCoordinates = [" first letter", "  second letter  ", "   third letter   "]
print(setOfCoordinates) #[' first letter', '  second letter  ', '   third letter   ']
setOfCoordinates = [i.removeprefix(" ") for i in setOfCoordinates]
print(setOfCoordinates) #['first letter', ' second letter  ', '  third letter   ']

【讨论】:

  • 但不修改原始列表
  • @x89 代码现已更新,现在修改原始列表
  • lstrip 去除所有前导空格,而不仅仅是一个
  • @SevC_10,我的错,我们在这里寻找的是str.removeprefix()。更新答案
【解决方案2】:

试试这个。使用enumerate。此外,replace 不是一个就地功能。它将返回替换的字符串。因此,您可以使用字符串连接。 i[0]+i[1:] 连接字符串。

l=["first letter", " second letter", " third letter"]
for j,i in enumerate(l):
    if i[0]==" ":
        print("Space found")
        l[j]=i[0].replace(" ",'')+i[1:]
        print("Space removed")
print(l)

输出:

Space found
Space removed
Space found
Space removed
['first letter', 'second letter', 'third letter']

【讨论】:

    【解决方案3】:

    只需使用replace函数的count参数即可:https://docs.python.org/3/library/stdtypes.html#str.replace

    在你的情况下:

    i.replace(" ", "", 1)
    

    只替换 1 次出现的 " "

    为了修改列表中的字符串,请使用它们的索引(感谢@Sujay 回答)

    l = ["first letter", " second letter", " third letter"]
    for j, i in enumerate(l):
        if i[0] == " ":
            print("Space found")
            l[j] = l[j].replace(" ", "",1)
    print(l)
    

    【讨论】:

    • 但是如果第一个字符不是空格,它会删除中间的空格,不是吗?
    • 在这种情况下是的,但首先检查第一个字符是否为空格,然后应用replace
    【解决方案4】:
    my =  ["first letter", " second letter", " third letter"]
    for i in range(0,len(my),1):
        if my[i][0] == " " :
            my[i] = my[i][1:]
    print(my)
    
    # result : ['first letter', 'second letter', 'third letter']
    

    我使用了“for”函数。之后,通过'Slice',如果前面为空,则字符串被截断。

    【讨论】:

      【解决方案5】:
      x = ["first letter", " second letter", " third letter"]
      x = [i.strip() for i in x] #### remove space from both the ends
      print(x)
      

      从一开始就删除空间

      x = ["first letter", " second letter", " third letter"]
      x = [i.lstrip() for i in x]
      print(x)
      

      从末尾删除空格

      x = ["first letter", " second letter", " third letter"]
      x = [i.rstrip() for i in x] #### remove space from both the ends
      print(x)
      

      【讨论】:

      • strip 函数删除所有尾随或前导空格,而不仅仅是一个
      • 这就是我为所有人展示的原因。想用谁就用谁。
      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 2020-05-22
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2021-04-02
      相关资源
      最近更新 更多