Python:A [1:]中的x是什么意思?

玛格·伊斯特汉(Margo Eastham)

当我发现以下内容时,我试图从Wikipedia理解Kadane的算法:

def max_subarray(A):
    max_ending_here = max_so_far = A[0]
    for x in A[1:]:
        max_ending_here = max(x, max_ending_here + x)
        max_so_far = max(max_so_far, max_ending_here)
    return max_so_far

我对Python不熟悉。我试图用谷歌搜索该语法的作用,但是我不知道正确的答案,因为我不知道它叫什么。但是,我认为A[1:]这等同于省略A[0],所以我认为for x in A[1:]:等同for(int i = 1; i < A.length; i++)于Java

但是,更改for x in A[1:]:为后for x in range(1,len(A)),我得到了错误的结果

抱歉,这是一个愚蠢的问题,但我不知道在哪里可以找到答案。有人可以告诉我这种语法的含义是什么吗?另外,您能给我相当于for x in A[1:]:Java的东西吗?

Preet Kukreti

这是数组切片语法。看到这样的问题:解释Python的切片符号

对于my_list对象列表,例如[1, 2, "foo", "bar"]my_list[1:]等于从0索引开始的所有元素的浅表复制列表1[2, "foo", "bar"]因此,您的for语句将遍历以下对象:

for-iteration 0: x == 2 
for-iteration 1: x == "foo" 
for-iteration 2: x == "bar" 

range(..) 返回索引(整数)的列表/生成器,因此您的for语句将遍历整数 [1, 2, ..., len(my_list)]

for-iteration 0: x == 1 
for-iteration 1: x == 2
for-iteration 2: x == 3

因此,在后一个版本中,您可以x用作列表的索引:iter_obj = my_list[x]

另外,如果您仍然需要迭代索引(例如,用于当前对象的“计数”),则可以使用稍微更pythonic的版本,可以使用enumerate

for (i, x) in enumerate(my_list[1:]):
    # i is the 0-based index into the truncated list [0, 1, 2]
    # x is the current object from the truncated list [2, "foo", "bar"]

如果您决定将其类型更改为其他类型,则此版本将为将来提供更多证明my_list,因为它不依赖于基于0的索引的实现细节,因此更可能与支持切片语法的其他可迭代类型一起使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章