无论如何在Python中做反向索引

时间:2013-05-12 16:10:58

标签: python

好的,我想我第一次发布时没有意义。但是我想知道的是,如果有一种方法可以做到与索引方法相反的方法。例如,假设我在python shell中输入>>> l ='你好'我知道如果我输入索引l [2],结果将是'l'。但是我想知道是否有任何简单的方法我可以使用,如果我放入l ['h']它将返回0,字符串中的索引值/位置。我需要它,以便我可以将它放入一个函数中。

3 个答案:

答案 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会引发ValueErrorstr.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

答案 1 :(得分:1)

您可能正在寻找index方法:

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

答案 2 :(得分: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循环之外什么都不做,第二行的第一行创建一个列表立即被丢弃