pyhton每日小练0002

如何序列化输出元素包含字符串元组的字符串元组

 

举个例子

 
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

今天的题目有点绕啊!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值