如何序列化输出元素包含字符串元组的字符串元组
举个例子
zoo1 = ('monkey', 'elephant')
zoo2 = ('python', zoo1)
将zoo2输出为python, monkey, elephant
解决方案
容易想到使用join()
函数,但join()
函数要求元素必须都是字符串类型,否则会抛出TypeError
错误
zoo1 = ('monkey', 'elephant')
zoo2 = ('python', zoo1)
print(', '.join(zoo2))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 1: expected str instance, tuple found
一个比较简单的方法是将zoo1给unpack进zoo2中,然后再将zoo2给unpack进print
函数,最后指定print
函数的sep
参数来输出
注:
sep:可以设置print中分割不同值的形式。应该是separation的缩写。 end:可以设置print打印结束时最后跟的字符形式。关于 sep 和 end参数的详解,这篇博客很不错
https://blog.csdn.net/jgxyz/article/details/85014391
zoo1 = ('monkey', 'elephant')
zoo2 = ('python', *zoo1)
print(*zoo2, sep=', ')
python, monkey, elephant
如果想要将结果存储起来,那么使用join
就可以了
zoo1 = ('monkey', 'elephant')
zoo2 = ('python', *zoo1)
s = ', '.join(zoo2)
print(s)
python, monkey, elephant
讨论
上面的方法仅仅是针对于特定的情况,那么对于一个多重嵌套的元组该如何处理呢
容易想到使用递归来实现,判断当前元素的类型来决定是否结束递归即可
下面是一个简单的实现方法
zoo = (
'monkey',
'elephant',
('penguin', 'camel'),
('zebra', 'giraffe'),
'python',
)
def my_join(tpl, sep):
return sep.join(x if isinstance(x, str) else my_join(x, sep) for x in tpl)
print(my_join(zoo, ', '))
monkey, elephant, penguin, camel, zebra, giraffe, python
今天的题目有点绕啊!!!!