要获取特定值范围,请形成一个列表

时间:2018-07-30 19:56:23

标签: python python-3.x

目标: 要从列表中获取整数的总和,除了忽略以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]。

谢谢!

4 个答案:

答案 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