首页 新闻 会员 周边 捐助

Python 字符串拼接

0
[待解决问题]

我有一个Python的 字符串的拼接问题
A = 'XYZ'
B= 'YWZ'
其中X,Y,W,Z都是不确定字符长度的字符串文本。我希望将A与B拼接为C:
C的格式如下:
C = 'XYWZ'
但是我不知道该怎么实现。

等月亮爬上坡的主页 等月亮爬上坡 | 初学一级 | 园豆:12
提问于:2024-03-17 16:59
< >
分享
所有回答(3)
0

您可以使用切片操作来实现这个字符串的拼接。由于您想要将 B 中的第一个字符(Y)与 A 中的第一个字符(X)和 B 中的第三个字符(W)和第四个字符(Z)拼接在一起,您可以按照以下方式操作:

A = 'XYZ'
B = 'YWZ'

将B中的第一个字符与A中的第一个字符拼接

C = A[:1] + B[:1]

将B中的第三个字符与第四个字符拼接

C += B[2:]

print(C) # 输出:'XYWZ'
这样,您就可以得到所需的 C 字符串,即 'XYWZ'。

Technologyforgood | 园豆:7541 (大侠五级) | 2024-03-17 21:27

抱歉,可能是我的表述不够准确。XYWZ只是一个指代的变量。
实际例子如下:
A = '' abcdefghijk''
B = "cdef123ghijk"
于是我希望得到
C = "abcdef123ghijk"
但是每个变量指代的字符串长度并不一致。可能如下:
A = '1234567890'
B = '89abcdefu0'
于是我希望得到
C = '123456789abcdefu0‘
没有确定的长度,因此我无法通过切片的形式去获取。
因为没获取到A和B两个值之前,我压根不知道应该从哪个位置进行切割

支持(0) 反对(0) 等月亮爬上坡 | 园豆:12 (初学一级) | 2024-03-18 16:52

补充:A = '12131415167'
B = '1314abcd15167'
则C应该为 121314abcd15167
我有想过
根据B[0]去A中搜寻起点,但可能会出现重复
A = '123456'
B = '3YU456'
根据B[:2]去A中搜寻起点,但可能会出现长度过高,无法找到起点的情况

支持(0) 反对(0) 等月亮爬上坡 | 园豆:12 (初学一级) | 2024-03-18 17:02

@等月亮爬上坡:
理解了您的问题,您希望在两个字符串中找到共同部分,然后将它们拼接起来。在找到共同部分之后,您需要将剩余部分依次拼接到一起。以下是一个解决方案:

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的结果。

支持(1) 反对(0) Technologyforgood | 园豆:7541 (大侠五级) | 2024-03-18 19:51

@Technologyforgood: okk,感谢大佬。我这就去试试

支持(0) 反对(0) 等月亮爬上坡 | 园豆:12 (初学一级) | 2024-03-19 09:01

@Technologyforgood:
大佬,怎么跟你输出的不一样。字符有可能是错位的,但是你的for循环是相同位置元素进行比较。于是完美错过了啦

支持(0) 反对(0) 等月亮爬上坡 | 园豆:12 (初学一级) | 2024-03-19 09:38
0

把A字符串从后向前切割,如果匹配成功则存为临时变量,若后续有更长的匹配成功的子串则覆盖这个变量,直到把A字符串切割完。匹配完成后用临时变量的长度切割A或B字符串然后拼接即可。

咸鱼划水 | 园豆:204 (菜鸟二级) | 2024-03-28 17:38
0
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
www378660084 | 园豆:1143 (小虾三级) | 2024-04-11 20:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册