Python每日一練0002
阿新 • • 發佈:2019-02-16
問題
如何序列化輸出元素包含字串元組的字串元組(好繞)
舉個例子
>>> 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每日一練