将双元组转换为字符串

时间:2017-09-21 12:35:17

标签: python string tuples

我想转换双元组,看起来像这样:

  {tuple}  <type 'list'>: ((u'833',), (u'765',) ,
 (u'11',) , (u'56',) , (u'61',) , (u'84',) )

到这个字符串:

"833, 765, 11, 56, 61, 84"

我试过这种方式:

query = double_tuple_from_above
str = ["'{}' ".format(element) for element in query ]
final_str = ', '.join(str)
# aaaa = steamids64.replace("(", "',)") # does not work

但结果看起来不合适,例如:

final_str = '(u'833',)' , '(u'765',)' , '(u'11',)' , '(u'56',)' , '(u'61',)' , '(u'84',)' 

如何纠正它?

5 个答案:

答案 0 :(得分:2)

使用正则表达式,即使用列表推导替换''的非数字,然后加入,

import re
m = ["'(u'833',)' ", "'(u'765',)' ", "'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "]
new =  ', '.join([re.sub('[^0-9]+' ,'', i) for i in m])

输出:

'833, 765, 11, 56, 61, 84'

答案 1 :(得分:2)

你的输入搞砸了,可能值得上游修复。

如果你坚持使用它,使用ast.literal_eval来评估元组(在从字符串的开头和结尾剥去引号和空格之后),取第一项并加入字符串:

l = ["'(u'833',)' ", "'(u'765',)' ",
 "'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "]

import ast

s = ", ".join(y[0] for y in (ast.literal_eval(x.strip("' ")) for x in l))
print(s)

结果:

833, 765, 11, 56, 61, 84

答案 2 :(得分:1)

您可以使用联接进行正则表达式:

import re
l = ["'(u'833',)' ", "'(u'765',)' ", "'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "]

', '.join([re.search("\d+", elem).group() for elem in l if re.search("\d+", elem)])

这会产生:

'833,765,11,56,61,84'

答案 3 :(得分:1)

import re

l = ["'(u'833',)' ", "'(u'765',)' ", "'(u'11',)' ", "'(u'56',)' ", "'(u'61',)' ", "'(u'84',)' "]
result = []

for elem in l:
    num = re.split(r'([0-9]+)', elem)
    result.append(num[1])

print(", ".join(result))

答案 4 :(得分:1)

在ipython中测试过。你应该更深入。

Python 2.7.13 (default, Feb  4 2017, 17:39:59)
Type "copyright", "credits" or "license" for more information.

IPython 5.4.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: a = ((u'833',), (u'765',), (u'11',), (u'56',), (u'61',), (u'84',))

In [2]: a
Out[2]: ((u'833',), (u'765',), (u'11',), (u'56',), (u'61',), (u'84',))

In [3]: flatter = (x[0] for x in a)

In [4]: ret = ', '.join(flatter)

In [5]: ret
Out[5]: u'833, 765, 11, 56, 61, 84'

In [6]: ret = ret.encode('utf8')

In [7]: ret
Out[7]: '833, 765, 11, 56, 61, 84'