【问题标题】:Why does Python skip first element in string join statement? [duplicate]为什么 Python 会跳过字符串连接语句中的第一个元素? [复制]
【发布时间】:2017-07-28 04:16:49
【问题描述】:

这是一个简单的例子:

In [155]: exampleArray = bytearray([0xc0, 0xff, 0x01])
In [156]: exampleArray
Out[156]: bytearray(b'\xc0\xff\x01')
In [157]: print ' 0x'.join('{:02x}'.format(x) for x in exampleArray)
c0 0xff 0x01

但我想要的是 0xc0 0xff 0x01

【问题讨论】:

  • Joins 在元素之间写入' 0x'
  • 试试print(' '.join('0x{:02x}'.format(x) for x in exampleArray))

标签: python string join


【解决方案1】:

正如您在documentation of str.join 中看到的那样:

返回一个字符串,它是可迭代迭代中字符串的串联。如果 iterable 中有任何非字符串值,包括字节对象,则将引发 TypeError。元素之间的分隔符就是提供这个方法的字符串。

所以' 0x' 是一个分隔符,放在字符串之间。但是,您可以通过以下方式轻松解决此问题:

print <b>' '</b>.join('<b>0x</b>{:02x}'.format(x) for x in exampleArray)

【讨论】:

    【解决方案2】:

    str.join() 仅将连接器放置在 连接的元素之间。来自str.join() documentation

    元素之间的分隔符是提供此方法的字符串。

    我的粗体强调)。

    改为加入空格,并更改格式以包含 0x 前缀:

    ' '.join('{:#04x}'.format(x) for x in exampleArray)
    

    # 更改格式以包含 0x 前缀;请注意您需要调整字段宽度以考虑额外的 2 个字符(每个字段现在占用 4 个字符,包括 0x 前缀)。

    演示:

    >>> exampleArray = bytearray([0xc0, 0xff, 0x01])
    >>> print ' '.join('{:#04x}'.format(x) for x in exampleArray)
    0xc0 0xff 0x01
    

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 2014-06-04
      • 2015-10-08
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多