簡體   English   中英

如何打印沒有括號的元組元組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM