2013-05-12 35 views
-3

好吧,我猜這是第一次發佈沒有意義。但是我想知道的是,如果有一種方法與索引方法所做的相反。例如,讓我說我在Python shell中輸入>>> l ='hello'我知道,如果我把索引l [2]結果將是'l'。但是我想知道是否有任何簡單的方法可以使用,如果我放入l ['h']它將返回0,字符串中的索引值/位置。我需要它,以便我可以將它放入函數中。反正有沒有在Python中做反向索引

+1

如果你想描述的算法,它確實幫助,如果你展示考試輸入和輸出,並解釋兩者之間的關係。 – Marcin 2013-05-12 16:20:07

回答

1

您可能正在尋找index方法列表:

>>> s = 'hello' 
>>> s.index('h') 
0 
2

如果我明白你的問題正確的話,我想你正在尋找enumerate()

>>> for ind, char in enumerate("mystring"): 
...  print ind,char 
...  
0 m 
1 y 
2 s 
3 t 
4 r 
5 i 
6 n 
7 g 

幫助enumerate

>>> enumerate? 
Docstring: 
enumerate(iterable[, start]) -> iterator for index, value of iterable 

Return an enumerate object. iterable must be another object that supports 
iteration. The enumerate object yields pairs containing a count (from 
start, which defaults to zero) and a value yielded by the iterable argument. 
enumerate is useful for obtaining an indexed list: 
    (0, seq[0]), (1, seq[1]), (2, seq[2]), ... 

編輯:

要獲得任何子串的第一個匹配的索引使用str.indexstr.find

str.index將提高ValueError如果沒有找到該項目,str.find將返回-1:

>>> strs = "hello" 
>>> strs.index("h") 
0 
>>> strs.find("h") 
0 
>>> strs.find("m") 
-1 
>>> strs.index("m") 
Traceback (most recent call last): 
    File "<ipython-input-9-5f19ab4b0632>", line 1, in <module> 
    strs.index("m") 
ValueError: substring not found 
0

你的問題是不是一清二楚 - 提供一組輸入和預期產出通常幫助。無論如何,如果我理解正確的話,你要的是一樣的東西:

def fun(index, bstr): 
    try: 
     return int(bstr[index]) 
    except IndexError, e: 
     # should handle the error here - don't know what 
     # behaviour you expect 
     raise 

def encrypt(text, bstr): 
    for index, char in enumerate(text): 
     flag = fun(index, bstr) 
     if flag: # iow : 'if flag == 1' 
      do_something() 
     else: # iow : 'if flag == 0' 
      do_something_else() 

encrypt("allo", "0001") 

作爲一個側面說明,考慮到您的代碼段,我覺得你應該先學會計劃在Python - 第一for環路什麼都不做,除了吃CPU週期,第二個的第一行創建了立刻丟棄