首页 > 解决方案 > 打印出列表中项目的出现

问题描述

首先,标识符列表可以是字符串或数值。第二,一个包含许多项目的列表。对于每个标识符(标识符列表中的项目)计算标识符在项目列表中出现的频率。为每个标识符创建以下输出:标识符在列表中出现的次数。将标记 <> 替换为标识符的实际值和出现次数。接下来,从项目列表中删除所有出现并返回修剪后的列表。修剪后的列表现在应该只包含在标识符列表中找不到的项目。问题是我没有得到任何输出。我如何修改打印命令以便它给我我需要的输出?而且我也有删除事件的问题。

def task_3_2_2(items, identifier): 
    occurences = items.count(identifier) 
    items.pop(occurences)
    print('Identifier {} has occured {} times'.format(identifier, task_3_2_2(items, identifier)))
    print (items)

我现在将我的代码修改为:

def task_3_2_2(items, identifier): 
    i = 0
    for i in items:
        if items.count(i) == identifier:
            items.pop(i)
        print (items)

但是,如果我例如用

task_3_2_2([8, 6, 8, 10, 8, 20, 10, 8, 8],[8])

输出只是:

[8, 6, 8, 10, 8, 20, 10, 8, 8]

标签: pythonlist

解决方案


首先,您并没有真正遍历标识符。因此,您一次只能处理一个标识符,尽管您传入了一个列表。

其次,您使用的 if 子句

if items.count(i) == identifier:

并没有真正做到,你想让它做什么。您实际上检查项目的出现次数是否等于标识符。很可能不是你想要的。

一个可能的解决方案可能如下所示:

def task_3_2_2(items, identifiers): 
    for id in identifiers:
        # Count occurances of identifier id in items
        id_count = items.count(id)
        print(f"Identifier {id} has occured {id_count} times")
        
        # Filter values not equal than identifier id
        items = list(filter(lambda x: x != id, items))
    return items

task_3_2_2([8, 6, 8, 10, 8, 20, 10, 8, 8],[8])

输出:

标识符 8 已出现 5 次

[6、10、20、10]


推荐阅读