有什么办法可以使字母重复排列吗?

时间:2020-06-13 11:13:53

标签: python

所以,这是我的问题:

我需要一种计算数组中相等字母的差的方法,如果还不够清楚的话,下面是一个示例:
在:estate
退出:+5 0 +2 0 0 0
在:tenant
退出:+5 0 +2 0 0 0
说明
因此,+ 5表示“ e”在以后的5个地方重复,0表示它不是在重复的,并且在“ tenant”中也必须相同。

到目前为止,我已经拥有了

from collections import Counter
DEBUG = True
#############################################################
class Isomorph_Tools:
  def isIsomorphic(w1,w2) : 
    if len(w1) != len(w2): return False
    return [len(set(w1)),len(set(w2))] == 2 * [len(set(zip(w1,w2)))]


def get_len(a):
  counter=0
  for i in a:
    counter = counter + 1
  return counter

def do_1(ary,inx):
  for i in ary:
    no = 0
    for j in ary:
      for l in range(0,get_len(ary)):
        if ary.index(i) == inx and ary.index(i) != ary[l]:
          no+=1
          return no
        else:
          return 0

def main(a,b):
  words = [a.split(" "),b.split(" ")]
  if not(Isomorph_Tools.isIsomorphic(words[0],words[1])):
    print(words[0] + ', ' + words[1] + 'are not isomorphs')
    return
  else:
    lettersOne = list(words[0][0])
    print(lettersOne)
    lettersTwo = list(words[1][0])
    print(lettersTwo)
    the_ones = []
    ####Start The Calculation####
    for letter in lettersOne:
      letterIndex = lettersOne.index(letter)
      print(lettersOne.index(letter))
      for i in 
      the_ones.append(do_1(lettersOne,letterIndex))
      print(the_ones)

main('estate','tenant')

请帮助

2 个答案:

答案 0 :(得分:1)

我假设您想查找下一个重复元素与当前元素的距离。

这是您可以做的一种方式:

s = 'estate'

print([next((j for j, x in enumerate(s[i+1:], 1) if s[i] == x), 0) for i in range(len(s))])
# [5, 0, 2, 0, 0, 0]

对于'tenant',它也输出[5, 0, 2, 0, 0, 0]。 忘记迹象,无论如何它都是积极的。

答案 1 :(得分:1)

另一种方法:

text = 'estate tenant'                                                          
words = text.split(' ') # Split up the words                                    
out = []                                                                        
for word in words:                                                              
    part = [word.find(char, i+1)-i for i,char in enumerate(word)]               
    out.append([max(index,0) for index in part])