元组转换为字符串

4

我有以下列表:

[('Steve Buscemi', 'Mr. Pink'), ('Chris Penn', 'Nice Guy Eddie'), ...]

我需要将它转换为以下格式的字符串:
"(Steve Buscemi, Mr. Pink), (Chris Penn, Nice Guy Eddit), ..."

我试着去做

str = ', '.join(item for item in items)

但遇到了以下错误:
TypeError: sequence item 0: expected string, tuple found

我该如何进行上述格式设置?
5个回答

11
', '.join('(' + ', '.join(i) + ')' for i in L)

输出:

'(Steve Buscemi, Mr. Pink), (Chris Penn, Nice Guy Eddie)'

5

你已经接近成功了。

str = '(' + '), ('.join(', '.join(names) for names in items) + ')'

输出:

'(Steve Buscemi, Mr. Pink), (Chris Penn, Nice Guy Eddie)'

分解一下:外层括号是单独添加的,而内部的括号是由第一个 '), ('.join 生成的。括号内的名称列表是用单独的 ', '.join 创建的。


我喜欢这个解决方案!它避免了每个元组都使用+运算符进行冗余字符串连接,就像我的解决方案一样(这会导致在每次操作后重新创建字符串)。在你的解决方案中,这种连接仅在所有连接完成后的最后一步发生。 - ovgolovin
@ovgolovin,我认为你的更容易理解,这就是我添加了分解。你应该得到这个勾选标记。 - Mark Ransom
我更喜欢你的回答,因为你解释了原因!谢谢 - Drewdin

3
s = ', '.join( '(%s)'%(', '.join(item)) for item in items )

这将返回 '(, <, g, e, n, e, r, a, t, o, r, , o, b, j, e, c, t, , <, g, e, n, e, x, p, r, >, , a, t, , 0, x, b, 7, 2, 0, 5, c, 3, 4, >, )'。 :^) - DSM
1
我认为这个简单一些:', '.join('(%s, %s)' % item for item in items) - Steven Rumbalski
@StevenRumbalski -- 你说得对,但它假设每个项目只有2个元素。 - mgilson
@mgilson:没错。只要《低俗小说》中的每个演员都只扮演一个角色,我们就没问题了。 - Steven Rumbalski
@StevenRumbalski -- 我想它们也需要是元组,但可以通过解包来解决 ', '.join('(%s, %s)'%(actor,role) for actor,role in movie_list) - mgilson
显示剩余3条评论

1

您可以简单地使用:

print str(items)[1:-1].replace("'", '') #Removes all apostrophes in the string

你想要省略列表中的第一个和最后一个字符,它们是方括号。就像评论中提到的那样,这样会在字符串周围保留单引号符。你可以使用 replace 删除它们。

NB 如@ovgolovin 所指出的,这将 删除所有撇号,包括名称中的撇号


这个解决方案在括号内留下了勾号:"('Steve Buscemi', 'Mr. Pink'), ('Chris Penn', 'Nice Guy Eddie')" - ovgolovin
“我需要将它转换为字符串”,虽然简单,但不符合要求。 - Mark Ransom
这个答案很好,但是它没有去掉字符串内部的单引号,而这正是我需要做的。 - David542
@DSM 真是的,你说得对,我本以为模型上有引号。用简单的替换修复了它。 - Zenon
我看到你的更新了。如果撇号在字符串中呢?它会被移除。 - ovgolovin
@ovgolovin,“无间道”电影角色名字里没有任何撇号吗? - Zenon

0

你差一点就成功了...

print ",".join(str(i) for i in items)

或者

print str(items)[1:-1]

或者

print ",".join(map(str,items))

1
还要注意的是,这里会有很多额外的引号。 - mgilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接