Python每日一练0002

发布时间:2019-08-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Python每日一练0002脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

问题

@H_304_3@如何序列化输出元素包含字符串元组的字符串元组(好绕)

举个例子

>>> 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参数来输出

>>> 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, ', '))

Stack Overflow

关注/投稿

欢迎关注我们的微信公众号python每日一练

想要投稿的朋友可以给我们的公众号留言,备注好【问题】【解决方案】【讨论】【来源】即可

Python每日一练0002

脚本宝典总结

以上是脚本宝典为你收集整理的Python每日一练0002全部内容,希望文章能够帮你解决Python每日一练0002所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。