【问题标题】:What is the most efficient way to read in a list of numbers separated by spaces in python?在python中读取由空格分隔的数字列表的最有效方法是什么?
【发布时间】:2021-06-22 22:01:59
【问题描述】:

最近,我一直在尝试一些竞赛编码,一个非常常见的事情(至少在我看来是常见的)是提供一个由空格分隔的整数列表作为输入。例如:

>>> 5 6 7 8 8 1 3 2

我希望能够读取此输入并将其转换为 Python 中的列表:

>>> 5 6 7 8 8 1 3 2
[5, 6, 7, 8, 8, 1, 3, 2]

到目前为止,这是我遇到的最有效的方法:

newList = list(map(int, input.split()))
print(newList)

我还看到了一种方法,您可以将输入作为字符串读取,然后将其设为列表,但我认为 map 仍然更有效。
有没有比这更有效的方法来读取整数列表并将其转换为列表?谢谢!

【问题讨论】:

  • “我也见过 .split() 方法,但我认为 map 仍然更有效。” - 您在当前方法中同时使用这两种方法。
  • 这归结为语义、偏好以及某些人可能称之为 Pythonic 的东西。根据给定的样本输入,您所拥有的一切都很好。与枚举 input.split() 并附加到列表相比,您可能节省了几个周期,但性能提升可以忽略不计。无论哪种方式,解决方案实际上都是O(n)
  • @h0r53 是的,我解决了这个问题,这可能有点不清楚,抱歉。我没有意识到那张地图是O(n),酷!
  • map 只是为集合中的每个元素调用一个函数。因此该函数被调用n 次,其中n 是集合中的项目数。 map 本身不一定是 O(n),但调用 map() n 次是。 int()O(1)。所以在这种情况下你有O(n) * O(1) = O(n)

标签: python arrays list input


【解决方案1】:

试试这个

print("5 6 7 8 8 1 3 2".replace(" ",","))
print("5,6,7,8,8,1,3,2".replace(","," "))

【讨论】:

    【解决方案2】:

    我想这就是你要找的东西

    print(" ".join([5, 6, 7, 8, 8, 1, 3, 2])) # for converting to  "[5 6 7 8 8 1 3 2"
    print("5 6 7 8 8 1 3 2".split(" ")) #for converting back 
    

    【讨论】:

    • 这实际上并不是我想要的,尽管它确实是将字符串加入/拆分为列表的好方法。
    • 告诉我你对输入和输出的期望,我现在给你写代码
    • 输入:空格分隔的整数列表;输出:相同的整数列表,但它现在是一个由逗号而不是空格分隔的 python 列表
    猜你喜欢
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2019-10-05
    相关资源
    最近更新 更多