For循环中变量前面的“:“做什么(Python)

h7wcgrx3  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(126)

我在HackerRank,试图学习一些pyhton,像任何其他初学者一样,然后我来到了"集合介绍"的问题
要做的任务对我来说似乎很简单...一开始
计算机输入N,是一个整数,arr,是一个列表,你的工作是写一个代码,取arr的数,除以N。简单吧?显然,对我来说不是
我想知道:变量前面的":"到底是怎么回事?

if array[:_+1].count(array[_]) == 1:

而为什么使计数方法的工作,我搜索,并没有发现什么,我听说这是一个好地方问,那么,任何想法?
我试着在一个在线计算器中对所有数字求和,但它只会给我用自己的代码会得到的结果。
经过一些编码的尝试和错误,我来到了这个:

if len(array) != n:
        print (array)
        del array[len(array)]
        print (array)
        arr = sum(array)
        print (arr)
        array = arr / n
        print (array)
        return ('%.3f') %array
    else:
        print (array)
        array = sum(array)
        print (array)
        print (array)
        return ('%.3f') %(array/n)

(Yeah,我知道这很糟糕)
但显然,这还不够,因为它总是给我一个错误的答案,所以我决定在讨论选项卡中找到一些东西,我发现了这个:

def average(array):
    sum_ = 0; count = 0
    for _ in range(len(array)):
      if array[:_+1].count(array[_]) == 1:
        sum_ += array[_]
        count += 1
    return '%.3f' % (sum_/count,)

我试了一下,出乎意料的是,成功了!
就像...第一次尝试时
区别就像...太棒了!
0.775,差值为0.775
我的密码是168.600另一个代码是169.375
为什么
如果与此相关,我使用Visual Studio代码
我还将"_"更改为"a",以查看是否有任何更改,但没有
输入编号:

n = 10
arr = [161, 182, 161 ,154 ,176, 170, 167, 171, 170 ,174]
result = average(arr)
print(result)

对不起,我英语不好

w7t8yxp5

w7t8yxp51#

array[2:4]给出了数组中的元素2和3。
array[start:end]将为您提供数组的一个 * 切片 *,从索引start开始,在索引end之前 * 一处停止(这意味着切片范围是左包含和右排除)。
现在,有一些快捷方式,如果你省略了start,切片将从数组的开头开始:array[:end]array[0:end]相同。如果省略end,切片将运行到数组的末尾。
所以array[:_+1]将给予你一个数组切片,从索引0开始,一直到索引_+1(不包括索引_+1),也就是说,一直到索引_(包括索引_)。

相关问题