【问题标题】:Joining integer list [duplicate]加入整数列表[重复]
【发布时间】:2018-02-24 21:59:19
【问题描述】:

我有一个应该代表二进制的整数列表:

x = [1, 0, 1, 1, 0, 0, 0, 0]
y = ''.join(x[:4])

我似乎无法加入它,我得到“序列项 0:预期的 str 实例,找到 int”

如果我这样做了

x = [str(1), str(0), str(1), str(1), str(0), str(0), str(0), str(0)]
y = ''.join(x[:4])

我得到“类型错误 int 对象不可下标”,但我没有尝试访问 int。

有人知道怎么回事吗?

【问题讨论】:

  • 第二个不可能给出这个错误。你一定做了别的事情。再次自己运行。
  • str.join() 方法连接的是字符串序列,而不是整数。
  • 您也可以将str映射到列表中,x = list(map(str, [1, 0, 1, 1, 0, 0, 0, 0]))x = [str(x) for x in [1, 0, 1, 1, 0, 0, 0, 0]]

标签: python arrays list


【解决方案1】:

str.join 接受一个迭代,其元素必须是字符串,而不是整数。

我看到您自己已经解决了这个问题,并且您的第二种方法确实有效(您给出的错误可能来自其他代码)。但是像这样手动将每个int 转换为str 绝对不是Pythonic。相反,您可以使用列表理解/生成器表达式或mapints 转换为strs:

''.join(str(i) for i in x[:4])
''.join(map(str, x[:4]))

示例:

In [84]: ''.join(str(i) for i in x[:4])
Out[84]: '1011'

In [85]: ''.join(map(str, x[:4]))
Out[85]: '1011'

【讨论】:

  • 请再次阅读 OP 的问题,这部分是他自己弄清楚的(第二个代码片段)。显然,他身边的其他事情出了问题。
  • @HuStmpHrrr 已编辑。
【解决方案2】:

也可以使用functools reduce

from functools import reduce

reduce(lambda x, y: str(x) + str(y),[1, 0, 1, 1, 0, 0, 0, 0])
'10110000'

【讨论】:

  • 这里是二次算法...注意,避免这正是sum(['a','b','c'], '')引发错误的原因:TypeError: sum() can't sum strings [use ''.join(seq) instead]
  • 你可以这样做:reduce(lambda x, y: x + str(y), [1, 0, 1, 1, 0, 0, 0, 0], '')
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2013-01-26
  • 2016-09-07
  • 2013-11-11
  • 1970-01-01
相关资源
最近更新 更多