我想转换双元组,看起来像这样:
{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',)'
如何纠正它?
答案 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'