所以,这是我的问题:
我需要一种计算数组中相等字母的差的方法,如果还不够清楚的话,下面是一个示例:
在: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')
请帮助
答案 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])