给定列表:
a = [["b", "a", 3], ["a", "b", 4], ["y", "a", 2], ["b", "a", "b"]]
我想在索引[1]和它们的计数处生成一个惟一元素的2D列表。在列表a上执行将产生:
[["a", 3], ["b", 1]]
我已经写了这么多代码:
[(item[1], sum(x[1].count(item[1]) for x in a)) for item in a]
…但是,它会生成以下列表:
[('a', 3), ('b', 1), ('a', 3), ('a', 3)]
如果可能的话,我想用一行代码来解决:)
使用^{} 与generator expression组合,可以获得项目计数:
要以序列列表的形式获取结果,请执行以下操作:
你可以从你的代码中得到一个只提供唯一条目的集合
你的代码的问题是,你在所有子列表上循环,并保留整个列表中第二个项目的计数,这肯定会产生相同项目的重复结果。相反,您可以使用
zip()
函数获取第二列,然后使用collections.Counter
计算第二列中的项数:在python 3.X中:
相关问题 更多 >
编程相关推荐