【问题标题】:count specific items in a nested list (x and y dependencies) inside python计算python中嵌套列表(x和y依赖项)中的特定项目
【发布时间】:2021-03-20 15:20:40
【问题描述】:

例如我有这些列表

bersarang=[['Cerah','Tinggi','Lemah','Iya'],['Cerah','Tinggi','Kuat','Iya'],['Mendung','Tinggi','Lemah','Tidak'],['Hujan','Tinggi','Lemah','Iya'],['Hujan','Normal','Lemah','Iya'],['Hujan','Normal','Kuat','Tidak'],['Mendung','Normal','Kuat','Iya']]

然后我想将'Cerah'和'Iya'计数到一个整数变量中,这些计数的答案应该是2。可以得到计数吗? 我尝试了计数,但它只计数 1 项。

我的失败解决方案:

bersarang.count('Cerah' and 'Iya')

【问题讨论】:

    标签: python list nested dependencies naivebayes


    【解决方案1】:

    使用python内置的函数计数

    bersarang=[['Cerah','Tinggi','Lemah','Iya'],['Cerah','Tinggi','Kuat','Iya'],['Mendung','Tinggi','Lemah','Tidak'],['Hujan','Tinggi','Lemah','Iya'],['Hujan','Normal','Lemah','Iya'],['Hujan','Normal','Kuat','Tidak'],['Mendung','Normal','Kuat','Iya']]
    
    def countit(thing):
        count = 0
        for i in bersarang:
            count += i.count(thing)
        return count
    print(countit("Cerah"),countit("Iya"))
    

    【讨论】:

      【解决方案2】:

      您可以使用for 循环:

      代码解释:

      1. count = 0count 设置为 0

      2. for sub_l in l: 遍历l

      3. 如果elems 在子列表中,if set(elems).issubset(sub_l): count += 1 将 1 添加到 count (sub_l)

      4. return count 返回 count 变量

      代码:

      def count_elems(elems, l):
          count = 0
      
          for sub_l in l:     
              if set(elems).issubset(sub_l):
                  count += 1
      
          return count
      
      print(count_elems(['Iya', 'Cerah'], [['Cerah', 'Tinggi', 'Lemah', 'Iya'], ['Cerah', 'Tinggi', 'Kuat', 'Iya'], ['Mendung', 'Tinggi', 'Lemah', 'Tidak'], ['Hujan', 'Tinggi', 'Lemah', 'Iya'],
                   ['Hujan', 'Normal', 'Lemah', 'Iya'], ['Hujan', 'Normal', 'Kuat', 'Tidak'],
                   ['Mendung', 'Normal', 'Kuat', 'Iya']]))
      

      【讨论】:

        【解决方案3】:

        如果你想计算两个值都出现的子列表,你可以这样做:

        bersarang = [['Cerah', 'Tinggi', 'Lemah', 'Iya'], ['Cerah', 'Tinggi', 'Kuat', 'Iya'],
                     ['Mendung', 'Tinggi', 'Lemah', 'Tidak'], ['Hujan', 'Tinggi', 'Lemah', 'Iya'],
                     ['Hujan', 'Normal', 'Lemah', 'Iya'], ['Hujan', 'Normal', 'Kuat', 'Tidak'],
                     ['Mendung', 'Normal', 'Kuat', 'Iya']]
        
        
        def count_values(values, lst):
            s = set(values)
            return sum(s.issubset(l) for l in lst)
        
        
        res = count_values(('Cerah', 'Iya'), bersarang)
        print(res)
        

        输出

        2
        

        基本上,该函数将检查值是否是列表的每个子列表的子集,为此我们使用issubset,然后使用sum 进行计数。

        一种替代方法,虽然对于大量值来说速度较慢,但​​是这样做:

        def count_values(values, lst):
            return sum(all(v in l for v in values) for l in lst)
        

        基本上检查all 值是否包含在每个子列表中。

        【讨论】:

          【解决方案4】:

          尝试使用收款计数器

          >>> from collections import Counter
          >>> z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
          >>> Counter(z)
          Counter({'blue': 3, 'red': 2, 'yellow': 1})
          

          【讨论】:

            猜你喜欢
            • 2014-09-30
            • 1970-01-01
            • 1970-01-01
            • 2020-05-04
            • 2023-03-31
            • 2013-01-26
            • 1970-01-01
            • 2021-03-23
            • 2018-06-14
            相关资源
            最近更新 更多