Python 如何将一个字符串添加到另一个字符串并删除重叠部分? 如何将一个字符串添加到另一个字符串中,如果它是双的,则删除中间的一个部分?

Python 如何将一个字符串添加到另一个字符串并删除重叠部分? 如何将一个字符串添加到另一个字符串中,如果它是双的,则删除中间的一个部分?,python,string,merge,overlapping,Python,String,Merge,Overlapping,我真的不知道如何解释这一点,但这就是我想做的: 比方说 string1 = "abcde" string2 = "cdefg" 如何创建一个string1+string2的变量,但只使用“cde”部分一次 我要找的东西是: string3 = merge(string1, string2) 这将使string3成为“abcdefg”,而不是“abcdecdefg” 我在谷歌上找不到它,所以我在这里问 非常感谢您的帮助:)您可以先检查是否存在重叠,然后仅附加非重叠部分: # Find ove

我真的不知道如何解释这一点,但这就是我想做的:

比方说

string1 = "abcde"

string2 = "cdefg"
如何创建一个string1+string2的变量,但只使用“cde”部分一次

我要找的东西是:

string3 = merge(string1, string2)
这将使string3成为“abcdefg”,而不是“abcdecdefg”

我在谷歌上找不到它,所以我在这里问


非常感谢您的帮助:)

您可以先检查是否存在重叠,然后仅附加非重叠部分:

# Find overlap if there is any
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Concatenate strings:
string3 = string1 + (string2 if k is None else string2[k:])
或者更简单,先将
k
设置为零:

# Find overlap if there is any
k = 0
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Simply concatenate them
string3 = string1 + string2[k:]

您可以先检查是否存在重叠,然后仅附加非重叠部分:

# Find overlap if there is any
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Concatenate strings:
string3 = string1 + (string2 if k is None else string2[k:])
或者更简单,先将
k
设置为零:

# Find overlap if there is any
k = 0
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Simply concatenate them
string3 = string1 + string2[k:]

我们可以在
s1
中查找
s2
的第一个字符的每次出现,并测试该出现的
s1
的其余部分是否是
s2
的开始。我们需要从
s1的开始到结尾都这样做,以确保获得最大可能的重叠

import re

def fusion(s1, s2):
    for m in re.finditer(s2[0], s1):
        if s2.startswith(s1[m.start():]):
            return s1[:m.start()] + s2
    # no overlap found
    return s1 + s2


string1 = "abede"
string2 = "edefg" # overlap: 'ede'

print(fusion(string1, string2))
# abedefg

我们可以在
s1
中查找
s2
的第一个字符的每次出现,并测试该出现的
s1
的其余部分是否是
s2
的开始。我们需要从
s1的开始到结尾都这样做,以确保获得最大可能的重叠

import re

def fusion(s1, s2):
    for m in re.finditer(s2[0], s1):
        if s2.startswith(s1[m.start():]):
            return s1[:m.start()] + s2
    # no overlap found
    return s1 + s2


string1 = "abede"
string2 = "edefg" # overlap: 'ede'

print(fusion(string1, string2))
# abedefg

这可以简单地用python set()实现,如下所示

>>> string1 = "abcde"
>>> string2 = "cdefg"
>>> string3 = string1 + string2
>>> print (''.join(sorted(set(string3))))
abcdefg
说明:
set()
删除重复的元素,
sorted()
排序,
join()
将所有元素合并回来


这可以简单地用python set()实现,如下所示

>>> string1 = "abcde"
>>> string2 = "cdefg"
>>> string3 = string1 + string2
>>> print (''.join(sorted(set(string3))))
abcdefg
说明:
set()
删除重复的元素,
sorted()
排序,
join()
将所有元素合并回来


先把它写在纸上。看看步骤是什么。然后写代码,先在纸上写出来。看看步骤是什么。然后编写代码。使用
string1=“abede”
string2=“edefg”
,您将得到
'abedededefg'
而不是'abedefg'。使用
string1=“abede”
string2=“edefg”
,您将得到
而不是'abedefg'。使用string1=“abedde”,string2=“edefghi”使用string1=“abedde”可以得到“abdefghi”而不是“abeddefghi”,使用string2=“eddefghi”可以得到“abdefghi”而不是“abeddefghi”