📜  Python|计算列表中包含给定元素的子列表

📅  最后修改于: 2022-05-13 01:55:46.659000             🧑  作者: Mango

Python|计算列表中包含给定元素的子列表

给定一个列表列表,编写一个Python程序来计算包含给定元素x的子列表的数量。

例子:

Input : lst = [1, 3, 5], [1, 3, 5, 7], [1, 3, 5, 7, 9]] 
        x = 1 
Output : 3

Input : lst = (['a'], ['a', 'c', 'b'], ['d']) 
        x = 'a'
Output : 2


方法#1:朴素的方法

计算包含x的列表数。将count初始化为 0,然后启动一个 for 循环并检查每个列表中是否存在x 。如果是,则增加count

# Python3 Program to count number of
# list containing a certain element 
# in a list of lists
  
def countList(lst, x):
    count = 0
    for i in range(len(lst)):
        if x in lst[i]:
            count+= 1
          
    return count
      
# Driver Code
lst = (['a'], ['a', 'c', 'b'], ['d']) 
x = 'a'
print(countList(lst, x))
输出:
2


方法#2:列表理解(幼稚的替代方案)
一个简单的单行列表理解也可以通过简单地将上述 Naive 方法转换为单行 for 循环来完成这项工作。

# Python3 Program to count number of
# list containing a certain element 
# in a list of lists
  
def countList(lst, x):
      
    return sum(x in item for item in lst)
      
# Driver Code
lst = (['a'], ['a', 'c', 'b'], ['d']) 
x = 'a'
print(countList(lst, x))
输出:
2


方法 #3:使用chain.from_iterable()Counter

我们可以使用Counter来计算出现了多少个列表“x”。由于我们不想对每个内部列表多次计算“x”,我们将每个内部列表转换为集合。在此之后,使用chain.from_iterable()将这些元素集连接到一个序列中。

# Python3 Program to count number of
# list containing a certain element 
# in a list of lists
from itertools import chain
from collections import Counter
  
def countList(lst, x):
      
    return Counter(chain.from_iterable(set(i) for i in lst))[x]
      
# Driver Code
lst = (['a'], ['a', 'c', 'b'], ['d']) 
x = 'a'
print(countList(lst, x))
输出:
2