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]]
我正在尝试将字符串拆分两次,目的是转换 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]]