gpt4 book ai didi

python - 我可以将计数器反转为没有倍数的列表列表吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:48 25 4
gpt4 key购买 nike

使用 Collection Counter ,

l1 = ['a', 'b', 'b', 'c', 'c', 'b', 'e']
l2 = ['a', 'b', 'b', 'c', 'c', 'b','d']

from collections import Counter

c1 = Counter(l1)
c2 = Counter(l2)

# Intersection
c1 & c2

>>> Counter({'b': 3, 'c': 2, 'a': 1})

什么习语可以将 Collections Counter 分配到一个列表列表中,其中每个倍数在每个列表中只出现一次?

[['a', 'b', 'c'],['b', 'c'],['b']]

最佳答案

不知道您是否正在寻找单线,但这是单线:

代码:

[sorted(y for y in z if y is not None) 
for z in it.izip_longest(*[[k] * l for k, l in c.items()])]

怎么做?

这里有两个关键点:

  1. [k] * l 给出了计数器键的列表,它是计数器值 long
  2. izip_longest() 会将列表放在一起,并为较短的列表填充空值

测试代码:

from collections import Counter
c = Counter({'b': 3, 'c': 2, 'a': 1})

import itertools as it
print([sorted(y for y in z if y is not None)
for z in it.izip_longest(*[[k] * l for k, l in c.items()])])

结果:

[['a', 'b', 'c'], ['b', 'c'], ['b']]

关于python - 我可以将计数器反转为没有倍数的列表列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com