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