这行代码如何工作? (Python,函数)

时间:2018-05-02 11:17:53

标签: python python-3.x function

def superindex(string, word):
    return [i for i, ltr in enumerate(string) if ltr == word]

我是Python的初学者,我想知道这种外观是如何运作的。

  1. 如何创建列表?
  2. i for i做什么?

4 个答案:

答案 0 :(得分:3)

返回字母wordstring变量中的字符匹配的索引。

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']

对于第一个问题,使用方括号会创建一个列表,并通过迭代列表ltrl值附加到列表中。

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

  • 枚举功能允许我们循环某些东西并拥有一个自动计数器
  • 这里每个' ltr'在变量'字符串'被分配了一个号码' i' (从零开始)

enumerate

此功能适用于字母:
[i for i in string]
返回superindex('foo', 'o')

以及单词列表:
[1,2]
返回superindex(['foo', 'bar'], 'bar')

注意:虽然变量表明这适用于字符串和单词,但更合适的命名可能是([1]list_of_strings)或(wordstring) 。如果寻求更一般的案例(letteriterable)......