def superindex(string, word):
return [i for i, ltr in enumerate(string) if ltr == word]
我是Python的初学者,我想知道这种外观是如何运作的。
i for i
做什么?答案 0 :(得分:3)
返回字母word
与string
变量中的字符匹配的索引。
for i, ltr in enumerate(string)
是string
中字母的for循环,因为您使用枚举,您也会获得索引i
。但是,在结尾添加if条件意味着只有在i
字母等于字母ltr
时才会返回word
所以这个
string = "yuppers"
word = "p"
print(superindex(string, word))
将返回此
[2,3]
答案 1 :(得分:1)
如果它是这样写的,你会更容易站起来:
lst = []
for i, ltr in enumerate(string):
if (ltr == word):
lst.append(i)
答案 2 :(得分:0)
理解单行for循环的简单方法是使用更基本的东西:
>>> l = ["a", "b", "c"]
>>> [ltr for ltr in l]
['a', 'b', 'c']
对于第一个问题,使用方括号会创建一个列表,并通过迭代列表ltr
将l
值附加到列表中。
enumerate
是一个内置函数,允许在循环可迭代对象时使用计数器。这里,i
迭代列表的索引,而ltr
遍历列表l
的元素。这是另一个例子:
>>> [i for i, ltr in enumerate(l)]
[0, 1, 2]
>>> [ltr for i, ltr in enumerate(l)]
['a', 'b', 'c']
Additioanlly,你最后有一个条件:
>>>[ltr for i, ltr in enumerate(l) if i>0]
['b', 'c']
此处,它只会使列表l
的元素的索引大于0
。
我希望,这有助于理解这些概念:)
答案 3 :(得分:0)
此函数正在创建与对象ltr
string
的{{1}}索引列表
此功能可以用更简单的方式编写:
word
def superindex(string, word):
l = list()
for i, ltr in enumerate(string):
if ltr == word: # check if ltr is equal to the variable word
l.append(i) # append the index i of the matching ltr in the string
return l
enumerate
[i for i...
循环被写为pythonic列表推导。这允许我们遍历一个iterable并在一行代码中创建一个列表(例如for
)。在很多情况下,这种形式的列表更有效(见Are list-comprehensions and functional functions faster than "for loops"?)
此功能适用于字母:
[i for i in string]
返回superindex('foo', 'o')
以及单词列表:
[1,2]
返回superindex(['foo', 'bar'], 'bar')
注意:虽然变量表明这适用于字符串和单词,但更合适的命名可能是([1]
和list_of_strings
)或(word
和string
) 。如果寻求更一般的案例(letter
和iterable
)......