转换为';229255 66';到Python中的(229255 66)

转换为';229255 66';到Python中的(229255 66),python,Python,我想把u'229255,66'转换成(229255,66) 有没有一个非常简单的方法可以做到这一点?或者是否需要拆分、转换为int等。内置函数eval()将返回一个元组,无需拆分(根据您的问题) 评估('29925566') 会回来的 (229255 66) 那么: x = u'229, 255, 66' p = tuple(map(int, x.split(','))) 实际上,split在逗号上,并使用列表理解将int应用于结果: In [1]: s = u'229, 255, 66'

我想把
u'229255,66'
转换成
(229255,66)

有没有一个非常简单的方法可以做到这一点?或者是否需要拆分、转换为int等。

内置函数eval()将返回一个元组,无需拆分(根据您的问题)

评估('29925566')

会回来的

(229255 66)

那么:

x = u'229, 255, 66'
p = tuple(map(int, x.split(',')))

实际上,
split
在逗号上,并使用列表理解将
int
应用于结果:

In [1]: s = u'229, 255, 66'

In [2]: tuple(int(i) for i in  s.split(','))
Out[2]: (229, 255, 66)

map
相当于列表理解(但目前有些人认为它“不太像pythonic”。
eval将起作用,但被认为是危险的,这取决于字符串的来源。

简单的方法是使用函数
ast.literal\u eval()
没有使用
eval的安全问题:

>>> from ast import literal_eval
>>> literal_eval(u'229, 255, 66')
(229, 255, 66)

Eval是邪恶的,ast.literal_Eval()更安全。如果字符串来自任何不完全可靠的源,请不要这样做:如果没有安全措施,
eval
可以像给您一个元组一样轻松地重新格式化您的光盘。答案在很大程度上取决于您要执行的错误检查级别。例如,是否要确保它是长度为3的元组?Duncan's Lal_eval解决方案,但比原始eval()安全得多,允许负数、任意长度的元组、字符串、无理数等,因此您可能需要进行其他检查。split/int解决方案为您提供一个任意长度的元组,仅包含整数,但如果其中一个项不是整数,则会引发ValueError。它还返回负数。如果出现错误,是否继续返回错误位置?