如何检查一个字符串的字母是否在另一个字符串中

时间:2016-12-07 16:18:58

标签: python python-2.7 python-3.x

我有一个按字母顺序排列的单词L,例如hello = ehllo 我如何检查这个单词“blanagrams”,这是除了1之外几乎所有类似字母的单词。例如,乐团变成了orchester。我只能想到这一部分。我有一个想法,你必须测试当前单词的每个字母,看看它是否对应于另一个,如果是,它是一个blanagram并创建一个字典,但我很难把它放入代码< / p>

L = [list of alphabetically ordered strings]

for word in L:

     for letter in word:
        #confused at this part

3 个答案:

答案 0 :(得分:2)

//////// feed.json ////////

{
   "programme" : [
      {
         "title" : "Rick & Morty",
         "startTime" : "19:00",
      },
      {
         "title" : "News",
         "startTime" : "19:30",
      }
  ]
}

示例:

from collections import Counter
def same_except1(s1, s2):
    ct1, ct2 = Counter(s1), Counter(s2)
    return sum((ct1 - ct2).values()) == 1 and sum((ct2 - ct1).values()) == 1

答案 1 :(得分:2)

史蒂文·伦巴尔斯基的回答让我思考,还有另一种方法可以通过一个计数器来做到这一点(+1使用收藏品并感谢你引起我的兴趣)

from collections import Counter
def diff_one(w,z):
    c=Counter(sorted(w+z)).values()
    c=filter(lambda x:x%2!=0,c)
    return len(c)==2

基本上所有匹配的字母都有一个偶数的计数器值。所以你过滤掉那些,然后留下不匹配的。如果你有超过2个不匹配,那么你有问题。

答案 2 :(得分:0)

假设这类似于AI中常用的梯形游戏部分,并且您尝试创建一个图形,其中相邻节点可能是单词,而不是字典。

d = {}
# create buckets of words that differ by one letter
for word in L:
    for i in range(len(word)):
        bucket = word[:i] + '_' + word[i+1:]
        if bucket in d:
            d[bucket].append(word)
        else:
            d[bucket] = [word]