for循环遍历单词

时间:2014-08-08 23:26:21

标签: python for-loop

我之前的帖子引起了很多混乱,并且充斥着与我的问题无关的答案。 (我没有澄清事情的错误)我标记了这个帖子,这是新帖子。 所以基本上我想做一个单词的结合。

EG1

    input [jason, sonny, nyorth]

    output [jason, sonny, nyorth, jasonnyorth]

EG2
    Sample input: [aw, was,poq, qo, soo] 
    Output [aw, was, poq, qo, soo, awasoo, poqo] 


EG3

    input: `[keyboard, ardjimmy]    
    output: `[keyboard, ardjimmy, keyboardjimmy]

我正在尝试输出

['jimmy', 'myolita'] 
jimmyolita
['jimmy', 'myolita', 'jimmyolita']

['myolita', 'jimmy']
jimmyolita
['myolita', 'jimmy', 'jimmyolita']

我知道这是一个双循环但我只是继续得到超级奇怪的东西。我想保持我的帖子简单,所以我没有发布我的尝试S =。在旁注中我也不喜欢我做"检查"和" maxNum"事情,我有一种感觉,它并没有覆盖所有情况,并给出了我特定情况下的奇怪输出。我更喜欢在for循环中执行它,因为这里没有列出其他部分问题。一个例子是当有无限的情况时:

[abc, bca] -> [abc, ca, abca] -> [abc, ca, abca, abcabc] -> it will keep going.



testing = ["jimmy", "myolita"]

testing1 = ["myolita", "jimmy"]
def frags(strings):
    check = 1
    maxNum = 1
    for i in range(0,len(strings[1])):
        if strings[0].find(strings[1][:i]) > maxNum:
            check = 0
            maxNum = strings[0].find(strings[1][:i])

    if check == 0:
       toReturn = strings[0][:maxNum] + strings[1]
       strings.append(toReturn)
    else:
       toReturn = "no match"

    return toReturn



print(testing)
print(frags(testing))                            
print(testing)

print("   ")

print(testing1)
print(frags(testing1))                            
print(testing1)

2 个答案:

答案 0 :(得分:2)

我认为你的规则是这样的:如果第一个字符串的后缀也是第二个字符串的前缀,请将其删除。然后合并两个字符串。

如果您向后搜索,从整个字符串开始向下搜索,而不是从单个字符开始并且正在进行处理,则除了当前后缀之外,您不需要跟踪任何内容。重新测试换句话说:

def frags(strings):
    left, right = strings
    for i in reversed(range(len(left))):
        if right.startswith(left[-i:]):
            return left[:-i] + right
    return left+right

答案 1 :(得分:0)

字符串切片可能会使代码更多更简单。这里有一些东西可以帮助你入门:

def overlap(left, right):
    for i in reversed(range(len(left))):
            if left[-i:] == right[:i]:
                break
    return left + right[i:]

for pair in [
    ('keyboard', 'ardjimmy'),
    ('jimmy', 'myolita'),
    ('myolita', 'jimmy'),
]:
    left, right = pair
    print pair, '-->', overlap(left, right), overlap(right, left)