1. 程式人生 > >Python每日一練0002

Python每日一練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引數來輸出

>>> 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每日一練