【问题标题】:What's the best way to convert an array of ints into a string?将整数数组转换为字符串的最佳方法是什么?
【发布时间】:2012-02-04 18:53:35
【问题描述】:

我想将一个 int 数组(例如 [1, 1, 2, 1])转换为字符串 ("1121")。

最好的(最 Pythonic)的方法是什么?

我总是可以这样做,然后删除多余的括号:

>>> str([1, 2, 1, 1])
'[1, 2, 1, 1]'

或者我可以这样做:

s = ""
for i in [1, 2, 1, 1]:
    s += s(i)

但是这两种方法都感觉有点不稳定。有没有更好的方法?

为了记录,我自然对 Python 的所有版本都感兴趣,但我正在研究 py2.7,并且希望得到适用于该版本的答案。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    生成器表达式:

    "".join(str(i) for i in l)
    

    PS:你的“数组”实际上是一个列表。

    【讨论】:

    • 是的,绝对是一个列表。经过 6 个月的激烈 C 学习后,我才回到 Python。那一定会发生:s
    【解决方案2】:

    试试:

    l = [1, 2, 1, 1]
    s = ''.join(map(str, l))
    print(s)
    

    这里,map(str, l)l 转换为字符串列表,''.join(...) 合并字符串。

    【讨论】:

    • 另外,''.join(str(x) for x in l) 可以说读起来更整洁(并且避免了 Python 2.x 中的中间列表,尽管 可以使用itertools.imap 来避免)。
    • @delnan 由于 str.join 对数据进行了两次传递,如果你给它一个列表,它运行得更快。这是始终需要中间列表的少数情况之一(如果您不提供中间列表,str.join 将不得不自己构建一个)。
    • @RaymondHettinger:+1 有趣,没有考虑到这一点(但现在它是有道理的 - 一次计算结果字符串的大小,一次构建它)。出于习惯和一致性,我可能仍然会使用生成器表达式。
    • @RaymondHettinger:实现可以使用 O(n) += 或类似 StringIO 的对象从可迭代对象构建字符串。虽然在典型情况下使用序列可能会更快。
    【解决方案3】:

    试试这个:

    lst = [1, 2, 1, 1]
    ''.join(str(x) for x in lst)
    

    它的效率很高,因为它不创建中间列表(如 map 所做的那样),而是使用迭代器遍历列表。

    【讨论】:

      【解决方案4】:

      这个只是为了好玩,因为它只在列表的每个元素都是一位整数时才有效:

      lst = [1, 1, 0, 1]
      
      def convert_to_str():
          new_num = 0
          for i in xrange(len(lst)):
              new_num += lst[i]*(10**(len(lst)-1-i))
          return str(new_num) 
      

      【讨论】:

      • 或str(reduce(lambda a,b:a*10+b, lst))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2011-04-13
      • 2013-06-23
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多