给出一个整数和数字的列表,我想找到列表中所有数字的总和,这样就不会添加数字以及给定数字之前和之后的数字。给定的数字也应从用于最终总和的数字中排除。
示例:
mylist=[1,2,3,4]
number=2
#output is 4
mylist=[1,2,2,3,5,4,2,2,1,2]
number=2
#output is 5
mylist=[1,7,3,4,1,7,10,5]
number=7
#output is 9
mylist=[1,2,1,2]
number=2
#output is 0
在第一个示例中,只有数字4与数字2不相邻。因此,总和为4。在最后一个示例中,没有数字满足条件,因此总和为0。
这是我尝试过的:
def add(list1,num):
for i,v in enumerate(list1):
if v==num:
del list1[i-1:i+2]
print list1
add([1,7,3,4,1,7,10,5],7)
但是,我的代码仅适用于第一个和第三个示例。
答案 0 :(得分:0)
我已经完成了您的代码,这是一个可行的解决方案:
def check_around(array, index, num):
return True if array[index - 1] != num and array[index + 1] != num else False
def get_result(array, num):
arr = []
for i, number in enumerate(array):
if number != num:
if i == 0 and array[1] != num: # Beginning of list
arr.append(number)
elif (i > 0 and i < len(array) - 1) and check_around(array, i, num): # Middle of list
arr.append(number)
elif i == len(array) - 1 and array[i-1] != num: # End of list
arr.append(number)
return arr
test = [([1,2,3,4], 2),
([1,2,2,3,5,4,2,2,1,2], 2),
([1,7,3,4,1,7,10,5], 7),
([1,2,1,2], 2)]
for (arr, num) in test:
res = get_result(arr, num)
print(f'output is {sum(res)}')
#output is 4
#output is 5
#output is 9
#output is 0
这个想法是创建一个临时数组,以保存确实属于求和的项目。否则,我们将忽略它们。 我尝试了您提供的所有测试,但似乎工作正常。希望这会有所帮助。
答案 1 :(得分:0)
获取元素的索引到列表中。 +1和-1将为您提供'before'和'after'元素的索引。然后将所有这些索引中的和避免元素相加。
list=[1,2,2,3,5,4,2,2,1,2]
number=2
#get all indexes of that number
list_of_indexes=[i for i,x in enumerate(list) if x==number]
#no need to remove -1 if there b'coz we are going to enumerate over 'list'
before_indexes=[i-1 for i in list_of_indexes]
#no need to remove len(list) index if present
after_indexes=[i+1 for i in list_of_indexes]
#might contain duplicate values but no problem
all_indexes_to_avoid=list_of_indexes+before_indexes+after_indexes
sum=sum([x for i,x in enumerate(list) if i not in all_indexes_to_avoid ])
print(sum)
输出
5
答案 2 :(得分:0)
为什么不只使用if语句并生成新列表,而不是从列表中删除?
def add(list,num):
j=0
new_list=[]
for i in range(len(list)):
if (i<len(list)-1 and list[i+1]==num) or list[i]==num or list[j]==num:
pass
else:
new_list.append(list[i])
j=i
print(sum(new_list))
print(new_list)
return sum
add([1,2,3,4],2)
add([1,2,2,3,5,4,2,2,1,2],2)
add([1,7,3,4,1,7,10,5],7)
add([1,2,1,2],2)
输出
4
[4]
5
[5]
9
[4, 5]
0
[]