2013-03-04 84 views
1

说我有串testString = "x=4+y and y = 8"高效的方式

我想运行findIndices(testString),并取回含有式项目索引列表

即本应返回[0,1,2,3,4,10,11,12,13,14]

我我以为这会工作

find equalSigns 
foreach equalSign 
    look to the left until you see a space not preceded by an operator 
     put current index in formulalist 
    look to the right until you see a space not preceded by an operator 
     put current index in formulalist 
    put the equalSign index in the formulalist 

return formulalist 

1)是否有更有效的方式在Python?它是什么? (正则表达式?)

2)如果这是高效的:如何编写“向左看”和“向右看”子例程?

+0

为什么11和13在列表中?那些是空白的。 – arshajii 2013-03-04 22:16:48

+5

很容易就可以解决某些情况下可用的问题。在考虑解析它之前,你真的需要写下语法。 – 2013-03-04 22:18:16

+0

**尝试一些然后显示给我们。**不要描述它,但编辑问题并粘贴到实际代码中。然后告诉我们什么没有工作。当你尝试时发生了什么?你得到不正确的结果了吗?你有没有得到结果?如果结果不正确,是什么使它们不正确?你想要什么呢?你有没有得到任何正确的结果?如果是这样,他们是什么?不要让我们猜测。 – 2013-03-05 01:37:31

回答

2

我不知道你要什么,但

string.split("=") 
string.index("=") 

例如:

In [1]: a= "y = 25*x + 42*z" 
In [2]: a.split("=") 
Out[2]: ['y ', ' 25*x + 42*z'] 
In [3]: a.index("=") 
Out[3]: 2 

可能是你有帮助。

2

正如注意到的gnibbler的评论,在考虑解析它之前写下语法。这就是说,如果一个“公式”是一个不带空格和至少一个等号在一个字符串,下面的函数会从一个字符串返回公式的列表:

def formulas(s): 
    return filter(lambda x: '=' in x, s.split()) 

例如:
formulas('x=4+y and y=8')产生['x=4+y', 'y=8']
formulas("x=4+y and y = 8")产生['x=4+y', '='] formulas('x=4+y and y=8 etc z=47+38*x + y')产生['x=4+y', 'y=8', 'z=47+38*x']

当然这些结果不是索引的列表,并且该字符串y = 8未被视为FO rmula。但是,从更大的角度来看,在进行更详细的处理之前,简化语法并将原始字符串拆分为单独的公式可能会更有用。