Python 2.7 如何连接包含部分相同字符串的连续字符串列表
例如,这是字符串列表Python 2.7 如何连接包含部分相同字符串的连续字符串列表,python-2.7,Python 2.7,例如,这是字符串列表 a = 'abcdefg' b = 'efghij' c = 'ij234235' d = 'def' e = 'efg' f = 'fg' str_list = [a, b, c, d, e, f] 我希望结果是['abcdefghij234235','defg'] 串联应该按顺序执行,并且公共字符串不是固定的 如何获得结果?使用和itertools.chain.from\u iterable()函数的解决方案: import numpy as np, itertoo
a = 'abcdefg'
b = 'efghij'
c = 'ij234235'
d = 'def'
e = 'efg'
f = 'fg'
str_list = [a, b, c, d, e, f]
我希望结果是['abcdefghij234235','defg']
串联应该按顺序执行,并且公共字符串不是固定的
如何获得结果?使用和itertools.chain.from\u iterable()
函数的解决方案:
import numpy as np, itertools
str_list = [list(a), list(b), list(c), list(d), list(e), list(f)]
result = []
for k,a in enumerate(str_list):
if len(result) == 0:
result.append((str_list[k],))
if k+1 == len(str_list): break
common = ''.join(np.intersect1d(str_list[k],str_list[k+1]))
if common and common[-1] == ''.join(str_list[k])[-1] and common[0] in ''.join(str_list[k+1])[0]:
result[-1] += (str_list[k+1][len(common):],)
else:
result.append((str_list[k+1],))
result = [''.join(list(itertools.chain.from_iterable(t))) for t in result]
print(result)
输出:
['abcdefghij234235', 'defg']
使用和itertools.chain.from\u iterable()
函数的解决方案:
import numpy as np, itertools
str_list = [list(a), list(b), list(c), list(d), list(e), list(f)]
result = []
for k,a in enumerate(str_list):
if len(result) == 0:
result.append((str_list[k],))
if k+1 == len(str_list): break
common = ''.join(np.intersect1d(str_list[k],str_list[k+1]))
if common and common[-1] == ''.join(str_list[k])[-1] and common[0] in ''.join(str_list[k+1])[0]:
result[-1] += (str_list[k+1][len(common):],)
else:
result.append((str_list[k+1],))
result = [''.join(list(itertools.chain.from_iterable(t))) for t in result]
print(result)
输出:
['abcdefghij234235', 'defg']
为什么它最终应该有两个项目?为什么不
“abcdefghij234235defg”
?您应该从思考解决方案并尝试实施它开始。在Stackoverflow中,我们希望用户在将问题发布到此处之前先尝试解决他们自己的问题,然后向我们展示他们尝试了什么以及失败的原因。@RomanPerekhrest,因为变量在字符串末尾和字符串开头之间有公共字符串。例如,变量a
以efg
结尾,变量b
以efg
@alfasin开头,我尝试使用最长公共子序列
算法的函数。我将LCS函数放入一个递归函数中,以重复列表中的串联。@ChangminChoi它实际上比这更简单,因为您要查找的只是从一个字符串末尾和另一个字符串开头开始的最长公共子字符串。这种限制使得查找更容易。请注意,您正在寻找一个公共子字符串,而不是子序列!为什么它最终应该有两个项目?为什么不“abcdefghij234235defg”
?您应该从思考解决方案并尝试实施它开始。在Stackoverflow中,我们希望用户在将问题发布到此处之前先尝试解决他们自己的问题,然后向我们展示他们尝试了什么以及失败的原因。@RomanPerekhrest,因为变量在字符串末尾和字符串开头之间有公共字符串。例如,变量a
以efg
结尾,变量b
以efg
@alfasin开头,我尝试使用最长公共子序列
算法的函数。我将LCS函数放入一个递归函数中,以重复列表中的串联。@ChangminChoi它实际上比这更简单,因为您要查找的只是从一个字符串末尾和另一个字符串开头开始的最长公共子字符串。这种限制使得查找更容易。请注意,您正在寻找一个公共子字符串,而不是子序列!