2015-06-16 136 views
1

我试图其中B包含数字与转换A> 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(';') 

第一分工作正常,返回该

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

但操纵 'b中的项目' 做ES不会出现工作

+0

什么是你期望的输出? –

回答

2

您可以一次使用列表理解来做到既分裂,并返回一个列表的列表:

>>> 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']] 
+0

'map'已被弃用(为了列表解析)。您发现只需添加另一个:[[:1] -1 .split('} {')]中item的item.split(';')]中的[[int(subitem) –

0

函数调用

item.replace('{','') 

没有做任何事情来item,因为它返回更换后的新字符串。请尝试:

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

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

+0

这不是他想要的,它会修改项目元素,但不是列表b – lapinkoira

+0

这个问题很不清楚OP的实际*想要什么*。我在现有的代码中发现了一个明显的错误。当然,还需要做更多的工作,才能真正做到结果。 –

+0

我认为非常清楚,他希望这个输出b = [[1,5],[2,7],[3,9],[4,8]]与这个输入a ='{1; 5} { 2; 7} {3; 9} {4; 8}”。他做了一个分割b并接收这个输出b = ['{1; 5','2; 7','3; 9','4; 8}']但是没有通过编辑循环中的项来修改b 。 – lapinkoira

1

你有实际用其项交互来修改表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(';') 
1

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

你正在寻找的输入字符串内的项目由

  • 两个数字\d+
  • 用花括号中\{\}分号;
  • 分开的。

完整图案看起来像这样:

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

附加括号()限定其允许提取的数字,例如具有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]]