从python列表中删除'

时间:2011-12-16 07:10:39

标签: python list

我有一个列表,在python中看起来像这样:

ex = ['(1..3),(5..8)']

我需要这样列出:

[(1, 3), (5, 8)]

我尝试使用替换功能,但只能这样 ['(1, 3), (5,8)']并且不会丢失'标记。

希望有人可以帮助我。

由于

4 个答案:

答案 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("..",",")))