我需要一些帮助。我查了一下,关于“计算排列”的问题很少,但我找不到适合我案例的答案。
我想计算项目列表中每个项目的排列总数。比如说,你有两个列表('第一个','第二个'见下文),对于'first'的每个元素,我想拥有它的唯一排列总数。例如,'first'中的'a'我们有
AB AC 广告 AB AC 广告 AB AB
删除重复项,我们有
ab ac ad
因此'a'的排列数将为'3'
我想得到的最终结果应该是
(a,3)
(b,3)
(c,3)
(d,3)
我从
开始import itertools
from collections import Counter
first = ['a','b','c','d']
second = [['a','b','c','d'], ['a','b'], ['a','c','d'], ['a','b','d']]
c = Counter()
for let in second:
letPermut = list(set(itertools.permutations(let, 2)))
for i in first:
for permut in letPermut:
if permut[0] == i:
c[i] += 1
for item in c.items():
print(item)
但是在输出中,我得到first
列表中每个元素的不同计数,并且Counter的结果高于预期输出。我不知道我做错了什么。
任何帮助?
答案 0 :(得分:2)
嗯,问题仍然不是很明确,但这里是我的0.02 $:
def do_the_stuff(first, second):
second = list(set(second))
return {
el1: sum(1 for el2 in second if el1 in el2)
for el1 in first
}
有一些测试数据:
>>> first = ['a','b','c','d', 'j']
>>> second = ['abcd', 'ab', 'ab', 'acd', 'abd']
>>> print do_the_stuff(first, second)
{'a': 4, 'c': 2, 'b': 3, 'd': 3, 'j': 0}
答案 1 :(得分:1)
如果我确实理解您的问题,这些更改会使您的代码忽略重复的排列:
import itertools
from collections import Counter
first = ['a','b','c','d']
second = [['a','b','c','d'], ['a','b'], ['a','c','d'], ['a','b','d']]
uniques = []
c = Counter()
for let in second:
letPermut = list(set(itertools.permutations(let, 2)))
for i in first:
for permut in letPermut:
if permut[0] == i and not permut in uniques:
c[i] += 1
uniques.append(permut)
for item in c.items():
print(item)
uniques
uniques
uniques
以供将来检查for let in second
循环中取出打印循环。因此,每个计数器最后只打印一次。