我有一个脚本可以搜索给定列表中的数字13。如果找到13,则需要将其删除,但我还需要删除它之后的索引。我得到它来找到所有的13并删除它们,但我不确定删除它后的索引的最佳方法。我知道我需要在13之后删除索引,因为删除后的移位。最后,我需要返回所有索引的总和,我已经完成了。
这是我在Codebat.com中所做的一项挑战,它不允许导入。
这就是我所拥有的:
def sum13(nums):
#Return 0 for empty lists
if nums == '':
return 0
#Find 13s, remove next index and then index of 13
while(True):
if 13 in nums:
#remove the index after 13 here
nums.remove(13)
else:
break
#Return the sum of all indices.
else:
return sum(nums)
输入是随机的整数列表,例如:
sum13([13, 1, 2, 13, 2, 1, 13]) # Expected Outcome: 3
sum13([1, 2, 13, 2, 1, 13]) # Expected Outcome: 4
为了获得下一个索引,我在for循环中尝试了nums.index(i + 1)的变体,这只会产生错误,并且一直在试验列表推导和枚举,但是我是那些还不是100%。
答案 0 :(得分:4)
如果你试图索引过去的列表长度,你会得到错误,但是这可以通过在列表中添加一个额外的元素来规避(在你的情况下它可以为零,因为你是在所有元素的总和之后):
def sum13(nums):
nums += [0]
for i in range(len(nums) - 1):
if nums[i] == 13:
nums[i] = 0
nums[i + 1] = 0
return sum(nums)
如果您要连续考虑多个13,请按相反顺序执行:
for i in reversed(range(len(nums) - 1)):
答案 1 :(得分:1)
def sum13(nums):
return (sum13(nums[2:]) if nums[0] == 13 else nums[0] + sum13(nums[1:])) if nums else 0
缺点是它不能连续处理多个13。好处是它没有修改它的论点(一件好事)所以也可以处理只读数据。