【问题标题】:To count in how many list, certain elements appeared [closed]要计算有多少列表,出现了某些元素[关闭]
【发布时间】:2023-01-28 07:45:54
【问题描述】:

我想数数的几个名字,它们出现在多少列表中。

four_in_one = [['David','Ellen','Ken'],['Peter','Ellen','Joe'],['Palow','Ellen','Jack'],['Lily','Elain','Ken']]

for name in ['David','Ken','Kate']:
    for each_list in four_in_one:
        i = 0
        if name in each_list:
            i += 1
            print (name, i)

输出:

David 1
Ken 1
Ken 1

我怎样才能输出如下?

David 1
Kate 0
Ken 2

【问题讨论】:

  • 您为每个子列表重置计数器 (i = 0),并且仅当该名称在该列表中时才打印
  • 仔细想想代码的逻辑。对于给定的名称,print (name, i) 应该出现多少次?只有一次,还是每次匹配?因此,该代码应该在for each_list in four_in_one: 循环内,还是在循环外?同样,i = 0应该发生多少次,什么时候发生?
  • 作为旁白,尝试练习一些debugging 技能。我假设这些都是简单的逻辑问题,您应该可以毫无问题地自行解决 - 原因很简单,我可以看到您在过去 9 年中以相当规律的速度提出了大约 300 个 Python 问题。假设这不是故意为常见的逻辑错误播种规范,请在将代码发布到此处之前更加注意代码。如果是 - 这个问题可能会更好。
  • 很高兴听到你的 cmets。借此机会,我再次感谢那些分享和传播知识,无私地帮助我解决问题的人,他们让学习的世界和现实变得更加美丽可爱!
  • 我想知道马克,你是否不介意听取反馈。感谢“无私的帮助者”这一切都很好,但事先的努力不仅是这里的要求,而且是你作为工程师提高的唯一途径。此外,您似乎故意忽略多年来对您的问题所做的编辑,这变得相当令人厌烦。 Stack Overflow 是一个由志愿者建立的共享资源 -请查看否决票并更改课程.

标签: python list loops


【解决方案1】:
  • 将计数器声明移到内部循环之外。
  • 在内循环之后打印结果,而不是在它的每次迭代中打印。
for name in ['David','Ken','Kate']:
    i = 0
    for each_list in four_in_one:
        if name in each_list:
            i += 1
    print(name, i)

也可以使用sum 来缩短代码。

i = sum(name in each_list for each_list in four_in_one)

【讨论】:

    【解决方案2】:

    Counter 对扁平化列表进行计数,然后根据您要查找的名称限制生成的对象

    from collections import Counter
    
    four_in_one = [['David','Ellen','Ken'],['Peter','Ellen','Joe'],['Palow','Ellen','Jack'],['Lily','Elain','Ken']]
    names = ['David','Ken','Kate']
    
    res = Counter([i for sublist in four_in_one for i in sublist])
    res = {name: res[name] for name in names}
    
    print(res)
    
    # {'David': 1, 'Ken': 2, 'Kate': 0}
    

    【讨论】:

    • 问题指出“他们出现在多少名单中”所以如果一个名字在同一个列表中出现两次,它可能仍然需要被计算一次,这不会发生在这个解决方案中......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2020-06-03
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多