我有一個100個左右的元素的列表,實際上是一個包含每行的電子郵件元素。這個列表有輕微的變化,因爲其中有一個\ n的行被放在一個單獨的元素中,所以我不能簡單地使用固定值進行分片。我基本上需要一個可變的開始和結束短語(需要進行部分搜索,因爲我的一個開始短語實際上可能是Total Cost: $13.43
,所以我只會使用Total Cost:
。)與結尾短語相同。我也不希望在返回的列表中包含開始/停止詞組。總結:Python:在字符串列表中查找X到Y
>>> email = ['apples','bananas','cats','dogs','elephants','fish','gee']
>>> start = 'ban'
>>> stop = 'ele'
# the magic here
>>> print new_email
['cats', 'dogs']
注意
- 雖然電子郵件不是完美的格式,它是相當一致的所以有一個渺茫的機會開始/停止短語會出現不止一次。
- 也沒有空白的元素。
SOLUTION
只是爲了funzies並感謝這裏大家的幫助是我的最終代碼:
def get_elements_positions(stringList=list(), startPhrase=None, stopPhrase=None):
elementPositionStart, elementPositionStop = 0, -1
if startPhrase:
elementPositionStart = next((i for i, j in enumerate(stringList) if j.startswith(startPhrase)), 0)
if stopPhrase:
elementPositionStop = next((i for i, j in enumerate(stringList) if j.startswith(stopPhrase)), -1)
if elementPositionStart + 1 == elementPositionStop - 1:
return elementPositionStart + 1
else:
return [elementPositionStart, elementPositionStop]
它返回的起始和結束元素位置,默認爲0和列表-1如果無法找到相應的值。 (0是第一個元素,-1是最後一個元素)。
SOLUTION-B
我做一個小的變化,現在如果列表被描述的開始和停止位置,導致僅有1元件之間它返回元件位置爲整數,而不是一個列表您仍然獲得多線回報。
再次感謝!
你不需要返回列表,返回元組通常工作得很好。 [將list()'作爲默認值做的事情完全不同。](http://docs.python.org/tutorial/controlflow.html#default-argument-values)。我的代碼也是這樣的原因是DRY。 – SilentGhost 2010-06-03 17:04:52
是的,我仍然在研究整個「好Python程序員」的事情。我開始與Django一起學習Python,所以我覺得我可能錯過了很多Python的小功能,但我正在學習。 – TheLizardKing 2010-06-03 17:29:17