![](/img/trans.png)
[英]How to print list of tuples without brackets and in different lines python
[英]how to print a tuple of tuples without brackets
我試圖在沒有括號的情況下打印下面給出的元組new_zoo
:
zoo=('python','elephant','penguin')
new_zoo=('monkey','camel',zoo)
我知道通常我們可以使用', '.join(...)
。 但是因為這里new_zoo
元組包含一個內部元組動物園,所以當我使用', '.join(new_zoo)
它會顯示:
TypeError: sequence item 2: expected str instance, tuple found
任何人都可以幫我解決這個問題嗎?
首先,您將zoo
添加到元組new_zoo
。 你應該解開它來擴展new_zoo
。
zoo = ('python', 'elephant', 'penguin')
new_zoo = ('monkey', 'camel', *zoo) # ('monkey', 'camel', 'python', 'elephant', 'penguin')
然后,對於打印,一個干凈的方法是print
您的元組print
並提供分隔符。
print(*new_zoo, sep=', ')
# prints: monkey, camel, python, elephant, penguin
如果要存儲打印的字符串,可以使用str.join
。
new_zoo_string = ', '.join(new_zoo) # 'monkey, camel, python, elephant, penguin'
您還必須加入zoo
的內容:
zoo=('python','elephant','penguin')
new_zoo=('monkey','camel',','.join(zoo))
final_zoo = ','.join(new_zoo)
輸出:
'monkey,camel,python,elephant,penguin'
但是,您也可以遍歷new_zoo
的內容並應用str.join
:
zoo=('python','elephant','penguin')
new_zoo=('monkey','camel',zoo)
final_zoo = ','.join([i if not isinstance(i, tuple) else ','.join(i) for i in new_zoo])
輸出:
'monkey,camel,python,elephant,penguin'
最簡單的方法是添加元組而不是嵌套它們:
>>> new_zoo = ('monkey', 'camel') + zoo
創建扁平元組的另一種方法是使用星形拆包(俗稱俗稱splat):
>>> new_zoo = ('monkey', 'camel', *zoo)
>>> print(new_zoo)
('monkey', 'camel', 'python', 'elephant', 'penguin')
在這種情況下', '.join(new_zoo)
您可以直接匯編字符串: ', '.join(new_zoo)
。 ', '.join(new_zoo)
。
如果需要處理嵌套元組,最常用的方法是遞歸解決方案:
>>> new_zoo = ('monkey', 'camel', zoo)
>>> def my_join(tpl):
... return ', '.join(x if isinstance(x, str) else my_join(x) for x in tpl)
>>> my_join(new_zoo)
monkey, camel, python, elephant, penguin
TypeError:序列項2:預期的str實例,找到元組
正如錯誤消息所示: new_zoo
第2 new_zoo
(記得從0開始計數,所以它是最后一項)需要是str類型才能join
,但它是一個元組。
看起來你想擴展你的zoo
元組,但是你把它作為項目插入zoo
而不是。 可以這么說,你將一個盒子放入另一個盒子中,而不是將第一個盒子中的物品放入第二個盒子中。
你可能想做這樣的事情:
new_zoo=('monkey','camel')+zoo
只需跟蹤元組然后使用遞歸,現在無論你有多少嵌套元組:
zoo=('python','elephant','penguin')
zoo1=('example1','example2',zoo)
zoo2=('example3','example4',zoo1)
new_zoo=('monkey','camel',zoo2)
def flat_tuple(tuple_s):
final=[]
for i in tuple_s:
if isinstance(i,tuple):
final.extend(flat_tuple(i))
else:
final.append(i)
return final
for sub in flat_tuple(new_zoo):
print(sub)
輸出:
monkey
camel
example3
example4
example1
example2
python
elephant
penguin
zoo = ('python', 'elephant', 'penguin')
new_zoo = ('monkey', 'camel', zoo)
# One liner
print(', '.join(map(lambda x: x if isinstance(x, str) else ', '.join(x) if hasattr(x, '__iter__') else str(x), new_zoo)))
# Recursive and powerful
def req_join(x):
if isinstance(x, str):
return x
elif hasattr(x, '__iter__'):
return ', '.join(map(req_join, x))
else:
return str(x)
big_zoo = ('cat', new_zoo, range(5), 'dog', 123, ('lev1', ('lev2', ('lev3', ('lev4', ('lev5', range(5)))))))
print(req_join(big_zoo))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.