我有一个列表,在python中看起来像这样:
ex = ['(1..3),(5..8)']
我需要这样列出:
[(1, 3), (5, 8)]
我尝试使用替换功能,但只能这样
['(1, 3), (5,8)']
并且不会丢失'
标记。
希望有人可以帮助我。
由于
答案 0 :(得分:8)
import ast
ex = ['(1..3),(5..8)']
list(ast.literal_eval(ex[0].replace('..', ',')))
# returns [(1, 3), (5, 8)]
ast.literal_eval
是安全的。 eval
不是。
有关更新的问题:
ex2 = ['(2..5)', '(7..10)']
[ast.literal_eval(a.replace('..', ',')) for a in ex2]
# returns [(2, 5), (7, 10)]
答案 1 :(得分:2)
看起来像某个regex任务。
>>> import re
>>> ex = ['(1..3),(5..8)']
>>> re.findall(r'\((\d+)\.\.(\d+)\)', ex[0])
[('1', '3'), ('5', '8')]
>>> # if you want tuple of numbers
... [tuple(map(int, x)) for x in _]
[(1, 3), (5, 8)]
答案 2 :(得分:2)
这比我想象的更糟糕:
In [26]: ex = ['(1..22),(3..44)']
In [27]: [tuple([int(i) for i in s.strip('()').split('..')])
for s in ex[0].split(',')]
Out[27]: [(1, 22), (3, 44)]
答案 3 :(得分:1)
如果您的格式是常量,这应该有效:
>>> n = list(eval(ex[0].replace("..",",")))
>>> n
[(1, 3), (5, 8)]
更新: 使用文字eval(更安全):
import ast
result = list(ast.literal_eval(ex[0].replace("..",",")))