【问题标题】:Sum of repeated segments within main list主列表中重复段的总和
【发布时间】:2021-09-21 12:42:00
【问题描述】:

如何创建一个新列表,其中包含 main_list 中 True 元素连续重复的所有 True 元素的总和?

main_list = [True, True, False, False, True, True, True, True, True, False]

预期的答案是:

true_sum = [2,5]
#first repeating True segment starts at index 0 and contains 2 elements from main_list and the second repeating segment starts at index 4 from main_list and contains 5 True elements.

我需要一个不需要使用 numpy 或 groupby 的简单代码。

我尝试将 main_list 划分为子列表,首先包含重复 True 元素的组,但在不使用 numpy 或 groupby 的情况下也很困难。

这是我尝试过但对我不起作用的方法:

true_sum = [sum(1 for i in main_list if i==True)]

【问题讨论】:

  • 您是否尝试过使用enumerate 遍历列表?这样,您也可以处理索引。
  • from collections import Counter?
  • 好的,这个网站上有一个问题是完全相同的,只是没有包含任何尝试(因为你在这里尝试了一些东西是链接(它也包含答案)):@ 987654322@ 或者至少是相似的(太相似了)
  • @Sujay 不幸的是,不,因为我需要每个重复 True 段的总和

标签: python list


【解决方案1】:

这会做你想做的事。循环结束后需要最后的检查才能正确处理main_listTrue结尾的情况:

def find_true_sum(main_list):
    count = 0
    true_sum = []
    for v in main_list:
        if v:
            count += 1
        elif count:
            true_sum.append(count)
            count = 0

    if count:
        true_sum.append(count)

    return true_sum

这是您的示例输入:

main_list = [True, True, False, False, True, True, True, True, True, False]
true_sum = find_true_sum(main_list)

这会将true_sum 设置为:

[2, 5]

补充例子:

>>> find_true_sum([True, False, True, True, False, True, True])
[1, 2, 2]
>>> 

此示例需要count 的循环后检查以产生正确的结果。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    main_list = [True, True, False, False, True, True, True, True, True, False]
    new_list = []
    l_1=[]
    num=0
    for name in main_list:
        if name:
           num+=1
        elif num:
           new_list.append(num)
           num=0
    print(new_list) #===== Prints [2, 5]
    

    【讨论】:

      【解决方案3】:

      另一种解决方案:

      main_list = [True, True, False, False, True, True, True, True, True, False]
      
      x = [len(v) for v in "".join(str(int(i)) for i in main_list).split("0") if v]
      print(x)
      

      打印:

      [2, 5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        相关资源
        最近更新 更多