2013-03-04 82 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。但是,從更大的角度來看,在進行更詳細的處理之前,簡化語法並將原始字符串拆分爲單獨的公式可能會更有用。