将一组数字重新排列为元组列表

时间:2011-08-10 12:46:03

标签: python

假设:

x = '1 (2,3), 4 (5)'

我将如何获得:

y = [(1,2),(1,3),(4,5)] ?

谢谢。

2 个答案:

答案 0 :(得分:1)

>>> x = '1 (2,3), 4 (5)'
>>> gp = re.compile('\d+\s*\([\d,]+\)(?=,?)')
>>> # digit, whitespace, (, digits or commas, ), maybe a comma
>>> for token in gp.findall(x):
...     token = token.split("(", 1)
...     left, right = int(token[0]), map(int, token[1][:-1].split(","))
...     for elt in right:
...             print((left, elt))
...
(1, 2)
(1, 3)
(4, 5)

警告:由于基于正则表达式的解析,这很脆弱。 (例如,它假设您的所有数字都是整数。)如果您的输入比我假设的更灵活,您可能希望考虑推广正则表达式或移动到正确的解析库。

一个巧妙的用途是将它放在一个函数中并将print更改为yield,以使其成为生成器。

答案 1 :(得分:1)

不确定这是否有帮助,但它对我有用:

x = '1 (2,3,9), 4 (5), 7'

output = []

for y in x.split(')'):
    if not y:
        continue
    data = y.split('(')
    right = int(data[0].strip(' ,'))
    if len(data) == 2:
        output.extend([(right, int(c)) for c in data[1].split(',')])
    else:
        output.append((right, ))

print output
>>> [(1, 2), (1, 3), (1, 9), (4, 5), (7,)]