如何打印没有括号的元组元组

时间:2018-03-13 20:38:27

标签: python tuples

我正在尝试打印下面给出的元组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

任何人都可以帮我解决这个问题吗?

6 个答案:

答案 0 :(得分:4)

首先,您要将zoo添加到元组new_zoo。你应该打开它来扩展new_zoo

zoo = ('python', 'elephant', 'penguin')
new_zoo = ('monkey', 'camel', *zoo) # ('monkey', 'camel', 'python', 'elephant', 'penguin')

然后,对于打印,一个干净的方法是在print中打开你的元组并提供一个分隔符。

print(*new_zoo, sep=', ')
# prints: monkey, camel, python, elephant, penguin

如果您想存储打印的字符串,可以使用str.join

new_zoo_string = ', '.join(new_zoo) # 'monkey, camel, python, elephant, penguin'

答案 1 :(得分:3)

您还必须加入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'

答案 2 :(得分:3)

最简单的方法是添加元组而不是嵌套它们:

String stripUnicode(String s) {
    StringBuilder sb = new StringBuilder(s.length());
    for (char c : s.toCharArray()) {
        if (c <= 0xFF) {
            sb.append(c);
        }
    }
    return sb.toString();
}

...

String pdf1PageText = pdfStripper.getText(pdf1);
String pdf2PageText = pdfStripper.getText(pdf2);
if (!stripUnicode(pdf1PageText).equals(stripUnicode(pdf2PageText)))
...

创建扁平元组的另一种方法是使用星形解包(有时也称为splat):

>>> new_zoo = ('monkey', 'camel') + zoo

您可以直接汇编字符串:>>> new_zoo = ('monkey', 'camel', *zoo) >>> print(new_zoo) ('monkey', 'camel', 'python', 'elephant', 'penguin')

如果需要处理嵌套元组,最通用的方法是递归解决方案:

', '.join(new_zoo)

答案 3 :(得分:2)

  

TypeError:序列项2:预期的str实例,找到元组

正如错误消息所示:new_zoo中的项目2(记得从0开始计数,所以它的最后一项)需要为join的str类型,但是这是一个元组。

您似乎想要扩展zoo元组,但是您将其作为项目插入到zoo中。可以这么说,你把一个盒子放进另一个盒子里,而不是把第一个盒子中的物品放到另一个盒子里。

你可能想做这样的事情:

new_zoo=('monkey','camel')+zoo

答案 4 :(得分:0)

只需跟踪元组然后使用递归,现在无论你有多少嵌套元组:

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

答案 5 :(得分:0)

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