Eli*_*Eli 51 python python-2.7
比方说,我有一个与元组相同形式的字符串"(1,2,3,4,5)".将其转换为实际元组的最简单方法是什么?我想做的一个例子是:
tup_string = "(1,2,3,4,5)"
tup = make_tuple(tup_string)
Run Code Online (Sandbox Code Playgroud)
只是tuple()在字符串上运行会使整个事件成为一个大元组,而我想要做的就是把字符串理解为一个元组.我知道我可以使用正则表达式,但我希望有一种成本更低的方式.想法?
Nik*_* B. 109
它已经存在!
>>> from ast import literal_eval as make_tuple
>>> make_tuple("(1,2,3,4,5)")
(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
但请注意角落情况:
>>> make_tuple("(1)")
1
>>> make_tuple("(1,)")
(1,)
Run Code Online (Sandbox Code Playgroud)
如果您的输入格式与Python不同,则需要单独处理该案例或使用其他方法tuple(int(x) for x in tup_string[1:-1].split(',')).
我会推荐使用literal_eval.
如果您literal_eval对转换的内容不满意或想要更多地控制,您还可以反汇编字符串、转换值并重新创建元组。
听起来比它更复杂,实际上,它是一个单行:
eg = '(102,117,108)'
eg_tuple = map(int, eg.replace('(','').replace(')','').split(',')))
Run Code Online (Sandbox Code Playgroud)
这将抛出ValueError,如果在数组中的任何元素(字符串)是无法转换为int一样,例如'1.2'在字符串中'(1.2, 3, 4)'。
使用regex也可以达到同样的目的:
import re
eg = '(102,117,108)'
et_tuple = tuple(map(int, re.findall(r'[0-9]+', eg)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35494 次 |
| 最近记录: |