【问题标题】:Fast method of converting all strings in a list to integers将列表中的所有字符串转换为整数的快速方法
【发布时间】:2018-03-02 16:05:11
【问题描述】:

我已经浏览了Convert all strings in a list to int 的帖子

我要转换

results = ['1', '2', '3']

到:

results = [1, 2, 3]

我知道我可以做到的

  1. 地图(整数,结果)

  1. results = list(map(int, results))

我想要它更快的方式可能是使用 numpy 或更快。

实际代码是

from sys import stdin, stdout
import numpy as np
n = int(stdin.readline())


for i in range(0,n):
    lone = 0
    m = int(stdin.readline())
    results = stdin.readline().split()
    o = np.array(results, dtype=np.int64)
    for j in range (0,m):
        if o[j] in  o[j+1:m]:
            lone = lone +1
        elif o[j] in o [0:j]:
            lone = lone +1
        else:
            stdout.write(str(o[j]) + '\n')

    if lone == m:
        stdout.write ("-1 \n")

请让我知道在尝试处理数千个字符串时是否有任何方法可以实现这一点

【问题讨论】:

  • 你上面的方法怎么这么慢?
  • 当我处理数千个数字时,只需将这些数字转换为整数需要 6-7 秒以上@BurhanKhalid
  • 你确定这是花时间的部分吗? 6 - 7 秒对于简单的转换操作来说是一个巨大的时间。这听起来像你在其他地方有问题。你能发布你的计时码吗?
  • 请检查编辑@BurhanKhalid
  • 感谢您的帮助

标签: python python-2.7 numpy type-conversion


【解决方案1】:

多处理是一种更快完成它的方法(除了使用 Numpy):

例如:

In [11]: from multiprocessing import Pool

In [12]: pool = Pool(10)

In [13]: pool.map(int, [str(i) for i in range(500)])

Numpy 将主要提供内存增益,因为您将处理原始类型而不是 python 对象,但也会提供不可忽略的速度增益。 像这样优化迭代时间总是通过使用并行化来完成,所以我建议同时使用 Numpy 和进程池。

【讨论】:

  • 这不可能比任何 numpy 更快,除非你可能以某种方式将 numpy 与它结合起来,即使那样你也只会看到超过 1M 元素的差异,可能更多。多处理只是带来了太多的开销,在这里没有用处。
  • 我并不是说 Python 对象会比 numpy 原语更快。我是说迭代最好通过并行化进行优化。最好还是两者都用。对于一个非常长的列表,游泳池肯定会赢。我会进行编辑以反映这种想法。
猜你喜欢
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 2020-01-11
  • 2021-10-25
相关资源
最近更新 更多