微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使字符串被反转,也计算列表中字符串的出现次数

如何解决即使字符串被反转,也计算列表中字符串的出现次数

我有一个字母对列表,我需要在下一步中计算它们的出现次数,但它们的反面被认为是同一件事,因此“mo”和“om”将是“mo”的 2 次出现,依此类推- 我想我会把字符串列表转换成一个列表,在那里我反转字符串然后计算它们的出现次数,所以这个列表所以我可以有一个字典,它们出现的频率:

pairs = ['mo','om','mo','ab','ba','af','fa','fa']
counted_pairs = [pairs.count(i) for i in pairs]
my_dictionary = dict(zip(pairs,counted_pairs))

该改成这样:

pairs = ['mo','af']
counted_pairs = [pairs.count(i) for i in pairs]
my_dictionary = dict(zip(pairs,counted_pairs))

为了让我数数。

我想出了这个代码

pairs = ['mo','fa']
loop_pairs = []

for i in range(0,len(pairs)):
    word = pairs[i]
    for el in range(0,len(pairs)):
        if word == pairs[el]:
            loop_pairs.append(pairs[el])
        else:
            if word == pairs[el][::-1]:
                loop_pairs.append(pairs[el][::-1])

并且到目前为止它可以将反向对附加到新列表中,但是我需要删除其余的出现,因为它继续检查下一个对象并且因为我已经在第一轮外循环这不是我需要的了。

我希望这很清楚,谢谢!

解决方法

在计数前将每一对排序成一致的顺序:

>>> from collections import Counter
>>> pairs = ['mo','om','mo','ab','ba','af','fa','fa']
>>> counts = Counter("".join(sorted(p)) for p in pairs)
>>> counts
Counter({'ab': 5,'mo': 4,'af': 4})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。