我有一个Python的 字符串的拼接问题
A = 'XYZ'
B= 'YWZ'
其中X,Y,W,Z都是不确定字符长度的字符串文本。我希望将A与B拼接为C:
C的格式如下:
C = 'XYWZ'
但是我不知道该怎么实现。
您可以使用切片操作来实现这个字符串的拼接。由于您想要将 B 中的第一个字符(Y)与 A 中的第一个字符(X)和 B 中的第三个字符(W)和第四个字符(Z)拼接在一起,您可以按照以下方式操作:
A = 'XYZ'
B = 'YWZ'
C = A[:1] + B[:1]
C += B[2:]
print(C) # 输出:'XYWZ'
这样,您就可以得到所需的 C 字符串,即 'XYWZ'。
抱歉,可能是我的表述不够准确。XYWZ只是一个指代的变量。
实际例子如下:
A = '' abcdefghijk''
B = "cdef123ghijk"
于是我希望得到
C = "abcdef123ghijk"
但是每个变量指代的字符串长度并不一致。可能如下:
A = '1234567890'
B = '89abcdefu0'
于是我希望得到
C = '123456789abcdefu0‘
没有确定的长度,因此我无法通过切片的形式去获取。
因为没获取到A和B两个值之前,我压根不知道应该从哪个位置进行切割
补充:A = '12131415167'
B = '1314abcd15167'
则C应该为 121314abcd15167
我有想过
根据B[0]去A中搜寻起点,但可能会出现重复
A = '123456'
B = '3YU456'
根据B[:2]去A中搜寻起点,但可能会出现长度过高,无法找到起点的情况
@等月亮爬上坡:
理解了您的问题,您希望在两个字符串中找到共同部分,然后将它们拼接起来。在找到共同部分之后,您需要将剩余部分依次拼接到一起。以下是一个解决方案:
def concatenate_strings(A, B):
common_part = ''
for char_a, char_b in zip(A, B):
if char_a == char_b:
common_part += char_a
else:
break
# 找到共同部分后,将剩余部分依次拼接到一起
rest_a = A[len(common_part):]
rest_b = B[len(common_part):]
return common_part + rest_a + rest_b
A = 'abcdefghijk'
B = 'cdef123ghijk'
C = concatenate_strings(A, B)
print(C) # 输出 'abcdef123ghijk'
A = '1234567890'
B = '89abcdefu0'
C = concatenate_strings(A, B)
print(C) # 输出 '123456789abcdefu0'
这段代码将找到A和B中相同的部分,并将剩余部分拼接起来,得到C的结果。
@Technologyforgood: okk,感谢大佬。我这就去试试
@Technologyforgood:
大佬,怎么跟你输出的不一样。字符有可能是错位的,但是你的for循环是相同位置元素进行比较。于是完美错过了啦
把A字符串从后向前切割,如果匹配成功则存为临时变量,若后续有更长的匹配成功的子串则覆盖这个变量,直到把A字符串切割完。匹配完成后用临时变量的长度切割A或B字符串然后拼接即可。
def contact(a:str,b:str):
idx = range(len(b))
idx = reversed(idx)
idx = [i+1 for i in idx]
idx1 = 0
for i in idx:
pos1 = a.find(b[:i])
if pos1 >=0:
idx1 = i
#print('idx1:%d pos1:%d'%(idx1, pos1))
break
idx = reversed(idx)
idx2 = len(b)
for i in idx:
if i < pos1: continue
pos2 = a.rfind(b[i:])
if pos2 >=0:
idx2 = i
#print('idx2:%d pos2:%d'%(idx2, pos2))
break
x = a[:pos1]
y = a[pos1:pos2]
w = b[idx1:idx2]
z = b[idx2:]
return x + y + w + z
print(contact('abcdefghijk','cdef123ghijk'))
#abcdef123ghijk
print(contact('1234567890','89abcdefu0'))
#123456789abcdefu0
print(contact('12131415167','1314abcd15167'))
#121314abcd15167