【问题标题】:How to count specific elements before an element in a list?如何在列表中的元素之前计算特定元素?
【发布时间】:2017-07-11 08:03:00
【问题描述】:

我们有一个清单

list = [1, 1, 1, 0, 1, 0, 0, 1] 

我正在尝试找到一个函数来计算每个项目之前 0 的数量,然后将这个数字乘以 3。

def formula(n):
    for x in list:
        if x == 1:
            form = n * 3
            return form
#If x is 1, count the number of zeros right before x and multiply this by 3, 

例如对于上面的列表,第一个元素是 1,并且它之前没有数字,程序应该计算 0 * 3 = 0,对于第二个项目,它也是一个 1,它之前的数字它也不是零,程序也应该计算 0 * 3 = 0。第 4 个元素是 0,所以程序应该忽略,对于第 5 个元素是 1,它之前的数字是 0,程序要计算 1 * 3 = 3,对于第 6 个元素,它之前的数字是 1,系统应该计算 0 * 3 = 0。第 7 个元素是 0,因为 x 不等于 1,所以程序不应该做任何事情.对于最后一个元素是 1,它之前的最后两个数字是零,程序应该计算 2 * 3 = 6

【问题讨论】:

  • 为什么跳过第 7 个元素?
  • Uriel Eld 的回答使用了一个生成器,而 sparkandshine 使用了一个列表,使用你觉得更舒服的那个,生成器虽然很pythonic
  • 感谢摩西的指正

标签: python list function count formula


【解决方案1】:

试试这个,

def formula(l):
    count_zero = 0
    result = []

    for i in l:
        if i == 1:
            result.append(3*count_zero)
            count_zero = 0
        elif i == 0:
            count_zero += 1

    return result

# Test case
l = [1, 1, 1, 0, 1, 0, 0, 1] 
result = formula(l)
print(result)
# [0, 0, 0, 3, 6]

【讨论】:

  • 我编辑了您的答案以将结果添加到列表中,请接受。
  • @Adirio,我做到了。
  • 嗨,我正在尝试调整 results.append 部分的公式,但我遇到了问题:result.append(max(3+count_zero), 0),当我将最大值添加到我得到的公式是:TypeError: 'int' object is not iterable。我该如何纠正这个,谢谢。
  • @TupilweSinyangwe,试试result.append(max(3+count_zero, 0))
  • 谢谢,我意识到我的错误是什么。
【解决方案2】:

我相信您正在寻找一个带有简单计数器的生成器:

def get_values (list):
    n = 0
    for x in list:
        if x == 1:
            yield n * 3
            n = 0   # reset the counter
        elif x == 0:
            n += 1  # increment the counter

print(list(get_values([1, 1, 1, 0, 1, 0, 0, 1])))
# [0, 0, 0, 3, 6]

【讨论】:

    【解决方案3】:

    这是我的解决方案。

    test_list = [1, 1, 1, 0, 1, 0, 0, 1]
    
    
    def formula(list):
        track = []
        start = 0
    
        for i,n in enumerate(list):
            count_list_chunk = list[start:i]
            if count_list_chunk.count(0) > 0 and n != 0:
                start = i
    
            if n != 0:
                track.append( count_list_chunk.count(0)*3 )
    
        return track
    
    print formula(test_list)
    #[ 0, 0, 0, 3, 6]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2022-10-04
      • 2018-04-16
      • 1970-01-01
      相关资源
      最近更新 更多