从lis中获得特定值的范围

2024-10-01 09:16:36 发布

您现在位置:Python中文网/ 问答频道 /正文

目标: 从一个列表中获取整数的和,除了忽略从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索引,z9索引,最后是有问题的z69索引,它应该包含[[2,4],[6,8]]的范围,在求和计算时应该从主列表中排除。你知道吗

从上面的脚本可以看出,z9_ind等于[4,8],而z6_ind等于[2,6]。你知道吗

谢谢!你知道吗


Tags: 代码innone目标列表forif数字
3条回答

带有生成器的详细版本:

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

如果要使用代码的某部分:

a_sum = sum(a)
to_reduce = 0
for (bot,top) in zip(z6_ind, z9_ind):
    to_reduce += sum(a[bot:top+1])

基本上,压缩“成对”两个索引并获得它们之间的和-您希望将和减少的数字:

result = a_sum - to_reduce

我不确定我是否正确地捕捉到了它,但是你想要这个代码吗?你知道吗

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]]

相关问题 更多 >