【问题标题】:Remove spaces from a list of integers从整数列表中删除空格
【发布时间】:2022-06-16 18:42:50
【问题描述】:

我编写了一个代码,它接受多个数字并将它们转换为整数列表。但我用空格得到它们。

例如:我输入为:1,2,3,4,5(带逗号)。

我得到了[1, 2, 3, 4, 5]的列表

现在我只需要删除空格但它不起作用,我需要它看起来像这样[1,2,3,4,5]。 我试过这样做:

numbers = input().split(',')

for i in range(0, len(numbers)):
    numbers[i] = int(numbers[i])
mylist = str(numbers).replace(' ','')
print(mylist)

这会导致方括号被视为项目。

如何正确删除空格?

【问题讨论】:

  • 当我运行你的代码时,我得到[1,2,3,4,5](即没有空格)。
  • 您的 for 循环和前一行可以替换为:numbers = [int(i) for in in input().split(',')]numbers = list(map(int, input().split(',')))
  • 没有您的列表中没有空格,这对理解很重要

标签: python list


【解决方案1】:

我认为您将列表和列表的表示混为一谈。 list 本身没有空格,甚至没有逗号,它只有项目(在你的情况下是数字)。列表的表示就是这样 - 一种以正常、标准的方式表示其中的数据的方法。该标准包括逗号和空格。

如果您想要一个以您所说的方式表示列表及其项目的新事物,您可以像这样创建一个新字符串。

str(numbers).replace(' ','')

这有两个函数,链接在一起。首先,我们使用str(numbers) 来获得一个字符串,它是列表的字符串表示形式。这将是字符串'[1, 2, 3, 4, 5]'。然后你replace 任何空白空格键' ' 什么都没有''

编辑:

我想我读你的问题太快了,看到你做的和我在这里的代码中的完全一样,并说它没有完全按照你想做的事情做。我认为这里的答案是:不。

正如我在第一段中所说,有列表,也有列表表示。列表表示的函数是一个不能被轻易覆盖的python内置函数。我并不是说它不能完成,但我认为如果不定义一些新事物,你就无法完成它。

【讨论】:

    【解决方案2】:

    您可以将列表的打印行为更改为您自己编写的代码。

    numbers = input().split(',')
    
    for i in range(0, len(numbers)):
        numbers[i] = int(numbers[i])
    mylist = str(numbers).replace(' ','')
    
    print('[' + ','.join([str(n) for n in numbers]) + ']')
    

    这会打印一个括号[,然后是每个数字用逗号分隔,没有任何空格,最后是结束括号]

    输出如下所示:

    1, 2, 3, 4, 5
    [1,2,3,4,5]
    

    【讨论】:

    • join 不需要列表理解。你可以传入一个生成器表达式:','.join(str(n) for n in numbers)。甚至只是:','.join(map(str, numbers))
    • 任何一个都有效。我只是使用列表推导,因为它快速且易读。
    【解决方案3】:

    我对您的问题的理解是,您想输入一个列表作为字符串,并希望将其转换为 Python 数字列表。

    如果输入以下字符串[1, 2, 3, 4, 5],则可以在, 上进行拆分。然后你需要考虑删除最左边和最右边的字符,对应于括号:

    numbers = input()[1:-1].split(', ')
    
    for i in range(len(numbers)):
        numbers[i] = int(numbers[i])
    
    print(numbers)
    

    将数字从字符串转换为整数的其他选项如下:

    • Python内置map函数:

      numbers = input()[1:-1].split(', ')
      
      numbers = list(map(int, numbers))
      
      print(numbers)
      
    • Python 列表理解:

      numbers = input()[1:-1].split(', ')
      
      numbers = [int(n) for n in numbers]
      
      print(numbers)
      

    【讨论】:

      【解决方案4】:

      您可能想要做的是创建一个list 的子类,它具有您想要的repr 实现。这样,您仍然可以像对任何其他列表一样对列表对象进行操作(例如,您可以访问 numbers[0] 并且它将返回第一个数字),但是将列表作为一个整体打印将产生您正在寻找的输出。

      class MyList(list):
          def __repr__(self) -> str:
              return "[" + ",".join(repr(i) for i in self) + "]"
      
      numbers = MyList(int(n) for n in input().split(","))
      print(numbers)
      print(numbers[0])
      

      输入:

      1,2,3,4,5
      

      输出:

      [1,2,3,4,5]
      1
      

      由于MyListlist 的子类,您可以从任何可迭代对象中构造一个,包括生成器表达式(如上面的代码)或现有列表,例如:

      >>> n_copy = MyList(numbers)
      >>> n_copy
      [1,2,3,4,5]
      

      【讨论】:

      • 而且只要你制作了一个副本,空格就会回来:-P
      • 不,只需使用MyList 构造函数进行复制。或者添加MyList.copy 的单行实现以使其返回MyList,但这与OP 的用例无关。
      【解决方案5】:

      您可以使用re 模块的split 函数来处理拆分时的空格。然后,您只需将元素与',' 连接起来,并将整个内容嵌入到字符串表示的括号中。

      import re
      
      numbers = re.split(r'\s*,\s*', input())
      
      print(f"[{','.join(numbers)}]")
      

      【讨论】:

        猜你喜欢
        • 2013-11-17
        • 2011-11-10
        • 1970-01-01
        • 2014-04-10
        • 2013-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多