Python for循环和“ sum13”方法

我是一位本机C程序员,刚开始学习python,并且已获得以下编写方法:

Return the sum of the numbers in the array, returning 0 for an empty array. Except the number 13 is very unlucky, so it does not count and numbers that come immediately after a 13 also do not count.

我的解决方案是:

def sum13(nums):
  elem_sum = 0
  index = 0

  while index < len(nums):
    if nums[index] != 13:
      elem_sum += nums[index]
    else:
      index += 1 #nums[i] is 13, so skip the next element'
    index += 1

  return elem_sum

那些熟悉其他基于C语言的人会发现这里的循环类似于(相当干净的)

for(int i = 0; i < nums.size() /*nums.length*/; ++i) {
    if(nums[i] != 13) elem_sum += nums[i];
    else i++;
}

请注意,我是几天前才开始学习Python的,所以我对这门语言还是很陌生.我希望有人可以提供一些有关如何以“ Python”方式编写此循环的建议,或者可以使用我可能不知道的某些语言功能提供更干净的解决方案.

在之前的尝试中(无效),我进行了以下操作:

for i in range(len(nums)):
    if nums[i] != 13:
      elem_sum += nums[i]
    else:
      i += 1 #nums[i] is 13, so skip the next element'

解决方法:

关于sum和zip的理解如何:

码:

data = list(range(12, 16))
print(sum(i for i, j in zip(data, [0] + data) if 13 not in (i, j)))

结果:

27

这是如何运作的?

从内部开始,我们从zip开始. zip接受多个可迭代,并在第一次迭代时返回每个可迭代的第一个元素,然后在第二次迭代中返回每个可迭代的第二个元素,依此类推.

因此,我们要评估数据的当前元素加上前一个元素,因此我们传递数据,并通过在前面填充数据(在本例中为0)将数据偏移一个元素

将这两个列表扩展为i,j,一次扩展一个元素.然后,作为一种理解,如果i,j都不是13,则返回i.然后,对理解力进行求和,这很奇怪地将所有返回的元素求和.

上一篇:python-拆分DataFrame的奇数行而不使用double iloc


下一篇:在MySQL中索引VARCHAR