Python使用join()转列表为字符串报TypeError的解决方法
报错根因
itertools.product()返回的迭代器生成的每个元素都是元组类型,执行y = list(iter.product(numbers, repeat=2))后,y的实际内容是[('0','0'), ('0','1'), ('1','0'), ('1','1')],列表内元素全是元组,不是字符串。
而Python的str.join()方法要求传入的可迭代对象中,所有元素都必须是字符串类型,直接传入y时,方法读取到第一个元素是元组,就会抛出你看到的TypeError: sequence item 0: expected str instance, tuple found错误。
可行解决方案
- 方案1:遍历列表逐组拼接后再整体合并
先把y里每个元组的内部元素拼接成独立字符串,再传给join做整体拼接,代码如下:import itertools as iter numbers = ['0', '1'] y = list(iter.product(numbers, repeat=2)) # 先处理每个元组为字符串,再整体拼接 a = ''.join(''.join(item) for item in y) print(a) # 输出结果:00011011 - 方案2:直接迭代生成器减少内存占用
不需要提前把product结果转成列表存储,直接遍历product返回的迭代器边遍历边拼接,repeat参数较大时内存效率更高,代码如下:import itertools as iter numbers = ['0', '1'] # 跳过转列表步骤,直接处理生成器输出 a = ''.join(''.join(combo) for combo in iter.product(numbers, repeat=2)) print(a) - 方案3:按需添加组合间分隔符
如果需要不同的两位组合之间用分隔符区隔(比如空格、逗号、换行),只需要调整外层join的连接符即可,比如要每个组合用空格分隔:import itertools as iter numbers = ['0', '1'] y = list(iter.product(numbers, repeat=2)) # 外层join用空格做连接符 a = ' '.join(''.join(item) for item in y) print(a) # 输出结果:00 01 10 11
内容的提问来源于stack exchange,提问作者CJ-Programmer
相关产品推荐
相关产品推荐

