1

问题:

返回数组中数字的总和,对于空数组返回 0。除了数字 13 非常不吉利,因此它不算数,紧跟在 13 之后的数字也不算数。

我的代码:

def sum13(nums):
  l = len(nums)
  tot = 0

  if l==0:
    return 0

  for x in range(l):
    if nums[x]!=13:
      if nums[x-1]!=13:
        tot+=nums[x]

  return tot

失败的地方:

sum13([1, 2, 2, 1, 13]) should → 6, but my code is outputting 5
sum13([1, 2, 13, 2, 1, 13]) should → 4, but my code is outputting 3
4

29 回答 29

3

enumerate()可以给出索引,然后可以使用sum(). 添加到列表末尾的额外 0 使其适用于nums[i-1]when i = 0

def sum13(nums):
   nums += [0]
   return sum(n for i, n in enumerate(nums) if n != 13 and nums[i-1] != 13)
于 2013-12-20T02:08:22.093 回答
3

这是解决方案:

def sum13(nums):

    if len(nums) == 0:
        return 0

    for i in range(0, len(nums)):
        if nums[i] == 13:
            nums[i] = 0
            if i+1 < len(nums): 
                nums[i+1] = 0
    return sum(nums)
于 2015-12-06T04:20:31.157 回答
2

你的问题是什么时候x为零。x - 1-1这样它会得到你列表的最后一个元素(13)。要修复它,请不要测试x - 1是否x为零:

if x == 0 or nums[x-1] != 13:

在 Python 中,当您将负索引传递给列表时,它会向后访问其元素,因此:

>>> x = [1,2,3,4,5]
>>> x[-1]
5
>>> x[-2]
4
于 2013-02-15T18:44:55.660 回答
1

next()您可以通过使用函数而不是容易出错的索引来避免该错误:

def exclude13(iterable):
    it = iter(iterable)
    for x in it:
        if x == 13: # don't yield 13
           next(it) # skip number immediately after 13
        else:
           yield x

print(sum(exclude13([1, 2, 2, 1, 13]))) # -> 6
print(sum(exclude13([1, 2, 13, 2, 1, 13]))) # -> 4
于 2013-02-15T19:10:14.863 回答
1
def sum13(nums):
    count = 0
    sum = 0
    for i in range(len(nums)):
         if nums[i] == 13 or sum == 1 :
            nums[i]= 0
            sum = sum + 1
         count = count + nums[i]
         if sum  ==  2:
            sum  = 0
    if nums == []:
          return 0
    return coun
于 2013-11-08T00:05:17.487 回答
1
def sum13(nums):
    count = 0
    while count < len(nums):
        if nums[count] == 13:
            del nums[count:count+2]
            continue
        count += 1
    return sum(nums)
于 2013-07-05T06:48:57.230 回答
1
def sum13(nums):
  result = 0
  i = 0

  while i < len(nums):
    if nums[i] == 13:
      i += 2
      continue
    else:
      result += nums[i]
      i += 1

  return result
于 2020-05-23T07:43:07.817 回答
1
    def sum13(nums):
        sum = 0
        len_n = len(nums)
        k = 0
        while k < len_n:
            if nums[k] == 13:
                k += 2
            else:
                sum += nums[k]
                k += 1
        return sum
于 2017-09-09T06:54:02.240 回答
1

制作列表的副本以便原始列表不会更改,删除数字 13 和紧随其后的数字的实例,然后对结果列表求和:

def sum13(nums):
    nums = nums[:]
    while 13 in nums:
        i = nums.index(13)
        del nums[i:i+2]
    return sum(nums)

这类似于此问题的最佳答案: 寻找更优雅的解决方案

于 2017-06-01T16:02:21.220 回答
1
def sum13(nums):
  if len(nums)==0:
    return 0
  sum=0
  for i in range(1,len(nums)):
    if nums[i]==13 or nums[i-1]==13:
      sum = sum
    else:
      sum += nums[i]
  if nums[0]==13:
    return sum
  else:
    return sum + nums[0]

开始循环形式 1 并在末尾添加第一个数字(如果不是 13)。

于 2015-07-22T21:35:56.350 回答
1

列表的总和,除了什么时候item=13不会被计算在内,item+1也不会被计算在内

def sum13(nums):
  if len(nums)==0:
    return 0
  if nums[-1]==13:
    nums[-1]=0
  for i in range(len(nums)-1):
    if nums[i]==13:
      nums[i]=0
      nums[i+1]=0
  return sum(nums)
于 2020-01-09T09:44:56.707 回答
1

另一种看待它的方式:

def sum13(nums):
  sub = 0
  for i in range(len(nums)):
    if nums[i] == 13 :
      sub+=nums[i]
      if i+1<len(nums) and nums[i+1]!=13:
        sub+=nums[i+1]

  return sum(nums)-sub
于 2019-10-29T12:22:27.827 回答
0

您排除了紧接在 13之前的数字,而您应该排除紧接在 13之后的数字。

于 2013-02-15T18:45:34.063 回答
0

我建议使用递归解决方案。请注意,虽然列表的索引可能超出范围,但切片会给出一个空列表而不是错误,例如,如果 a = [1,1,2] 那么 a[3] 会给出错误,而 a[3:] 给出空列表 []。

def sum13(nums):
  if len(nums) == 0:
    return 0
  sum = sum13(nums[1:])
  if nums[0] != 13:
    return sum + nums[0]
  if nums[0] == 13:
    return sum13(nums[2:])
于 2014-06-05T00:03:10.733 回答
0

我以下列方式解决了这个问题。这是蛮力,但它确实有效:

def sum13(nums):
    count = 0
    if len(nums) == 0: 
        return 0
    for ans in range(len(nums)):
        if nums[ans] == 13 and ans < len(nums)-1: 
            nums[ans] = 0
            nums[ans+1] = 0
        elif nums[ans] == 13 and ans == len(nums)-1:
            nums[ans] = 0 
        else: 
            count += nums[ans]

    return count
于 2014-12-29T22:08:17.097 回答
0
def sum13(nums):
    li=[]
    if nums[-1]==13:
        li.append(13)
    for i in range(len(nums)-1):
        if nums[i]==13:    
            li.append(nums[i])
            li.append(nums[i+1])
    n=sum(nums)
    return (n-sum(li))
于 2020-05-30T17:21:01.683 回答
0
def sum13(nums):
  if len(nums) == 0:
    return 0
  total = 0
  for i in range(len(nums)):
    if nums[i] == 13 and  (len(nums)-1)>i:
      nums[i+1]=0
      total = total
    elif nums[i]==13:
      total = total
    else:
      total = total +nums[i]
  return total
于 2021-12-19T10:05:04.630 回答
0

返回数组中数字的总和,对于空数组返回 0。除了数字 13 非常不吉利,因此它不算数,紧跟在 13 之后的数字也不算数。

   def sum13(nums):
       nums += [0]
       add=sum(j for i, j in enumerate(nums) if j != 13 and nums[i-1] != 13)
       return add
于 2020-06-04T07:22:38.730 回答
0

这也应该有效。基本上这是一个双重继续声明。使用 enumerate() 为每次迭代分配索引和值对。如果一个数字是 == 13 --> continue,则下一个迭代项目应符合 elif 语句的条件,该语句也适用于以 13 开头的项目。elif 仅对索引 >= 1 的项目运行(因此没有问题在 [0] 处超出范围)。

def sum13(nums):
  if nums ==[]:
    return 0
  sum = 0
  for index, val in enumerate(nums):
    if nums[index] == 13:
      continue
    elif nums[index-1] == 13 and index > 0:
      continue
    else:
      sum += val
  return sum
于 2020-12-29T18:53:40.047 回答
0

当它x=0发生nums[x-1]冲突时,因为它的结果nums[0-1]好像是 13 那么它可能不会添加所以nums[0]最后检查。

def sum13(nums):
  co=0
  if len(nums)<=0:
    return co
  for a in range(1,len(nums)):
    if nums[a]==13:
      continue
    elif nums[a-1]==13:
      continue
    else:
      co=co+nums[a]      
  if nums[0]!=13:
    co+=nums[0]
  return co


于 2019-06-15T12:14:37.727 回答
0

这是我采取的一种方法,这也有效

nums = [1, 2, 2, 1, 13,2,1,2,3,13,4,5]
counter = 0
temp = []
for i in range(len(nums)):
    if nums[i] == 13:
        if (i+1) != len(nums) and nums[i+1] != 13:
            temp.append(nums[i+1])
            continue
        elif (i+1) == len(nums):
            continue
    else:
        counter = counter + nums[i]
temp_total = sum(temp)
count_total = counter - temp_total
print(count_total)
于 2019-02-11T23:42:55.473 回答
0

这里是另一个解决方案:

def sum13(nums):
  for i in range (len(nums)) :
    if nums[i] == 13 :
      nums[i] = 0 
      if i+1 < len(nums) and nums[i+1] != 13 :
        nums[i+1] = 0
        
  return sum(nums)
于 2022-01-01T20:51:24.323 回答
0

这是我对这个练习的解决方案!!!!

def sum13(nums):
    total = 0
    for i in range(len(nums)):
        if (nums[i] == 13 or nums[i-1] == 13 and i != 0):
            total = total
        else:
            total += nums[i]
    return total
于 2019-07-06T07:11:52.437 回答
0
def sum13(nums):

  total = sum(nums)

  for i in range (len(nums)):
    if nums[i]==13:
      total = total - nums[i]
      if (i+1) < len(nums) and nums[i+1]!=13: #Using !=13 because 13 will already
        total = total-nums[i+1]               #be detected from previous if

  return total
于 2021-12-11T22:00:30.257 回答
0
def sum13(nums):

  summed=0
  flag=True
  index_13=0

  for index, num in enumerate(nums):

    if num==13:
      index_13=index
      flag=False

    if flag==True:
      summed=summed+num

    if index_13+1<= len(nums)-1 and num==nums[index_13+1]:
       flag=True

  return summed
于 2019-08-22T21:12:38.890 回答
0
def sum13(nums):
    sum=0
    ind13=[]
    for num in nums:
        if num==13:
            num=0
            ind13=nums.index(13)
            ind13next=ind13+1
            nums[ind13]=0
            if nums[ind13] !=nums[-1]:
                nums[ind13next]=0
                sum=sum+num
        else:
            sum=sum+num
    return sum
于 2019-08-13T12:14:47.430 回答
0
def sum13(nums):
  sum=0
  count=0
  for i in range(len(nums)):
    if nums[i]!=13:
        count=count-1
        if count<=0:
            sum=sum+nums[i]
    else:
        count=2
  return sum
于 2020-07-20T11:45:36.463 回答
0

我思考这个问题的方式让我可以遍历列表——除了最后一个元素。然后,如果值为 13,则下一个元素变为 0。从那里 - 我重新加载列表 - 并将 ALL 13 替换为 0。最后,我只是简单地将列表的值相加。

def sum13(nums):
for i,x in enumerate(range(len(nums)-1)):
    if (nums[x]==13):
        nums[i+1]=0
        nums=nums
for i,x in enumerate(nums):
    if x==13: #if the element is equal to 13
        nums[i]=0
return sum(nums)
于 2020-09-24T02:00:53.053 回答
0
def sum13(nums):
  nums2 = []
  if 13 in nums:
    for i in range(len(nums)-1): # the -1 is needed to avoid out of range.
      if nums[i] != 13: nums2.append(nums[i])
      else:
        nums[i] = 0
        nums[i+1] = 0
    return sum(nums2)
  return sum(nums)

我创建了一个单独的列表并将我想要的数字附加到该列表中。我通过遍历每个元素并在它不等于 13 时附加该数字来通过 for 循环来做到这一点。

当它最终等于数字 13 时,我将通过将其设置为零来更改该数字(nums[i] = 0)。然后我还需要通过索引 (nums[i+1] = 0) 将下一个数字设置为零。所以他们然后从列表的总和中扣除。

这不是一个完美的解决方案,但它是一个可行的解决方案。

于 2018-03-24T23:14:52.537 回答