-3

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

4

3 回答 3

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.indexValueError如果未找到该项目将引发并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
于 2013-05-12T16:14:12.563 回答
1

您可能正在寻找以下index方法:

>>> s = 'hello'
>>> s.index('h')
0
于 2013-05-12T17:22:54.670 回答
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 周期之外什么都不做,第二个循环的第一行创建一个立即丢弃的列表

于 2013-05-12T16:32:17.160 回答