python 拆分字符串两次

python splitting string twice

我正在尝试将字符串拆分两次,目的是转换 a>b,其中 b 包含数字并拆分为多个 x/y 对

a = '{1;5}{2;7}{3;9}{4;8}'
b = [[1,5],[2,7],[3,9],[4,8]]

我的代码目前是这样的...

b = a.split('}{')
for item in b:
    item.replace('{','')
    item.replace('}','')
    item.split(';')

第一个拆分工作正常,returns这个

b = ['{1;5','2;7','3;9','4;8}']

但操纵 'items in b' 似乎不起作用

函数调用

item.replace('{','')

item 没有任何作用,因为它 returns 是替换后的新字符串。相反,尝试:

item = item.replace('{','')

需要对该块中的其他行进行类似的更改。

您可以使用列表推导同时进行两个拆分和return 列表的列表:

>>> a = '{1;5}{2;7}{3;9}{4;8}'
>>> [item.split(';') for item in a[1:-1].split('}{')]
[['1', '5'], ['2', '7'], ['3', '9'], ['4', '8']]

您必须通过与其项目交互来实际修改列表 b。你应该这样做:

for i, s in enumerate(b):
    b[i] = s.replace('{','')
    b[i] = s.replace('}','')
    b[i] = s.split(';')

In [9]: b
Out[9]: [['{1', '5'], ['2', '7'], ['3', '9'], ['4', '8}']]

我不知道这是否是您的预期输出

这里有两个不影响列表 b 的例子

for item in b:
    item = item.replace('{','')
    item = item.replace('}','')
    item = item.split(';')

In [21]: b = ['{1;5','2;7','3;9','4;8}']

In [22]: for item in b:
        item = item.replace('{','')
        item = item.replace('}','')
        item = item.split(';')


In [23]: b
Out[23]: ['{1;5', '2;7', '3;9', '4;8}']

这个也不会对列表 b 做任何事情。

for item in b:
    item.replace('{','')
    item.replace('}','')
    item.split(';')

这也可以使用 regular expressions 来完成。

您在输入字符串中查找的项目包括

  • 两个数字\d+
  • 以分号分隔;
  • 括在花括号中 \{, \}.

完整的模式如下所示:

pattern = r'\{(\d+);(\d+)\}'

附加括号 () 定义 groups 允许提取数字,例如 re.findall:

>>> for item in re.findall(pattern, a):
>>>     print item
('1', '5')
('2', '7')
('3', '9')
('4', '8')

然后将 int 映射到项目上以获得所需的结果是一件简单的事情:

>>> [map(int, item) for item in re.findall(pattern, a)]
[[1, 5], [2, 7], [3, 9], [4, 8]]

有些人更喜欢列表理解而不是 map

>>> [[int(x) for x in item] for item in re.findall(pattern, a)]
[[1, 5], [2, 7], [3, 9], [4, 8]]