目标: 要从列表中获取整数的总和,除了忽略以6开头并扩展到下一个9的数字部分(每6个字符后至少跟9个数字)。没有数字则返回0。
输入主列表
a=[4, 5, 6, 7, 9,2, 6,8,9]
到目前为止我的代码
z6_ind=[]
z9_ind=[]
z69_ind=[]
x=None
for i,v in enumerate(a):
if v==6:
z6_ind.append(i)
if v==9:
z9_ind.append(i)
print(z6_ind. z9_ind)
我的想法是根据单独的列表(例如z6_ind,z9_ind以及最后有问题的z69_ind来获取主列表的索引,其中应该包含以[[2,4],[6,8]表示的范围) ],该值应在进行总和计算时从主列表中排除。
在上面的脚本中,它给出的z9_ind等于[4,8],而z6_ind等于[2,6]。
谢谢!
答案 0 :(得分:1)
带有生成器的详细版本:
a=[4, 5, 6, 7, 9,2, 6,8,9]
def iterate(iterable):
stop = False
for i in iterable:
if i == 6:
if stop == False:
stop = True
continue
elif i == 9:
if stop == True:
stop = False
continue
if stop == False:
yield i
print(sum(iterate(a))) # will sum 4, 5 and 2
打印:
11
答案 1 :(得分:1)
我不确定我是否正确捕获了它,但是您是否需要此代码?
a = [4, 5, 6, 7, 9, 2, 6, 8, 9]
sigma = 0
exc_ind = []
flag = False
for ind, item in enumerate(a):
if item == 6 and not flag:
flag = True
exc_ind.append([])
exc_ind[-1].append(ind)
elif item == 9 and flag:
exc_ind[-1].append(ind)
flag = False
elif not flag:
sigma += item
print(sigma)
print(exc_ind)
结果:
11
[[2, 4], [6, 8]]
答案 2 :(得分:1)
如果要使用代码的一部分:
a_sum = sum(a)
to_reduce = 0
for (bot,top) in zip(z6_ind, z9_ind):
to_reduce += sum(a[bot:top+1])
基本上对两个索引进行“配对”并获得它们之间的总和-您要减少a_sum的数字:
result = a_sum - to_reduce
答案 3 :(得分:0)
您可以执行以下操作:
import numpy as np
a=np.array([4, 5, 6, 7, 9,2, 6,8,9])
ind1 = np.where(a == 6)[0]
ind2 = np.where(a == 9)[0]
indices = [item for i in zip(ind1, ind2) for item in np.arange(i[0], i[1]+1)]
result = sum(a) - sum(a[indices])
print (result)
输出
11