我是一位本机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.然后,对理解力进行求和,这很奇怪地将所有返回的元素求和.