我正在尝试打印下面给出的元组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
任何人都可以帮我解决这个问题吗?
答案 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))