我有一个元组列表,如:
data = [('a1', 'a2'), ('b1', 'b2')]
我想生成一个这样的字符串:"('a1', 'a2'), ('b1'. 'b2')"
如果我这样做:','.join(data)
,我收到错误:
TypeError: sequence item 0: expected string, tuple found
如果我想在一行中做某事而不做以下事情:
for elem in data:
str += ',%s' % str(elem)
那么有办法吗?
答案 0 :(得分:14)
使用生成器将元组转换为字符串,然后使用join()
。
>>> ', '.join(str(d) for d in data)
"('a1', 'a2'), ('b1', 'b2')"
答案 1 :(得分:1)
从str()
输出中删除左右括号:
>>> data = [('a1', 'a2'), ('b1', 'b2')]
>>> str(data)
"[('a1', 'a2'), ('b1', 'b2')]"
>>> str(data)[1:-1]
"('a1', 'a2'), ('b1', 'b2')"
>>>
答案 2 :(得分:0)
','.join(str(i) for i in data)
答案 3 :(得分:0)
payne和marcog的答案是正确的,因为它们直接将元组转换为字符串。
如果您需要更灵活的输出格式,可以在生成器表达式中解压缩元组,并以这种方式将其值用作格式字符串的参数:
", ".join("first element: %s, second element: %s" % (str(x), str(y)) for x, y in data)
通过这种方式,您可以克服元组的默认str
表示。