好的,我想我第一次发布时没有意义。但是我想知道的是,如果有一种方法可以做到与索引方法相反的方法。例如,假设我在python shell中输入>>> l ='你好'我知道如果我输入索引l [2],结果将是'l'。但是我想知道是否有任何简单的方法我可以使用,如果我放入l ['h']它将返回0,字符串中的索引值/位置。我需要它,以便我可以将它放入一个函数中。
答案 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.index
或str.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
答案 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循环之外什么都不做,第二行的第一行创建一个列表立即被丢弃