计算子列表在列表中的次数

问题描述 投票:0回答:2

我想知道子列表在彼此旁边的列表中有多少次。

从另一个问题,我收到以下代码,以确定子列表是否在列表中:

list_sequence = ['Example 64', 'Example 32', 'Example 16']

my_list = ['Example 128', 'Example 64', 'Example 32', 'Example 16', 'Example 256', 'Example 512', 'Example 1024']

print(str(list_sequence)[1:-1] in str(my_list))

但我想知道,list_sequence相互之间有多少次确定一个组合。在顶部示例中它是1,但如果我在开头和最后添加list_sequence,它仍然会1.如果我在my_list中的例16之后添加它,它将是2。

python python-3.x list
2个回答
0
投票

您可以在列表推导中使用zipenumerate来查找sub_list出现的地方的相应索引。然后选择那些减法等于3(sub_list的长度):

In [6]: list_sequence = ['Example 64', 'Example 32', 'Example 16']
   ...: 
   ...: my_list = ['Example 128', 'Example 64', 'Example 32', 'Example 16', 'Example 64', 'Example 32', 'Example 16', 'Example 256', 'Example 512', 'E
   ...: xample 1024','Example 64', 'Example 32', 'Example 16']
   ...: 

In [7]: indices = [index for index, (i, j, k) in enumerate(zip(my_list, my_list[1:], my_list[2:])) if list_sequence == [i, j, k]]
Out[7]: [1, 4, 10]

In [8]: sum(2 * (j-i == len(list_sequence)) for i, j in zip(indices, indices[1:]))
Out[8]: 2

您只在sum中使用生成器表达式来查找出现次数:

In [4]: sum(list_sequence == [i, j, k] for i, j, k in zip(my_list, my_list[1:], my_list[2:]))
Out[4]: 1

但请注意,这也将包括重叠,因为zip(my_list, my_list[1:], my_list[2:]))将为您提供所有后续三元组。


0
投票

计数通过创建list_sequence的字典

list_sequence = ['Example 64', 'Example 32', 'Example 16']

my_list = ['Example 128', 'Example 64', 'Example 32', 'Example 16','Example 16', 'Example 256', 'Example 512', 'Example 1024']
dic=dict()
for i in list_sequence :
    for j in my_list :
        if i==j:
            dic[i]=dic.get(i,0)+1
print(dic)

{'示例64':1,'示例32':1,'示例16':2}

© www.soinside.com 2019 - 2024. All rights reserved.