【问题标题】:How can you delete similar characters at the same positions in 2 strings如何删除 2 个字符串中相同位置的相似字符
【发布时间】:2020-02-04 00:17:28
【问题描述】:

如果公共字符位于同一位置,我需要想办法从两个字符串中删除公共字符,但它不起作用,我正在尝试解决这个问题。这是我到目前为止所尝试的,它适用于某些字符串,但是一旦第二个字符串大于第一个字符串,它就会停止工作。编辑:我还需要一种在打印之前将结果存储在变量中的方法,因为我需要在另一个函数中使用它。

例子:

ABCDEF 和 ABLDKG 将导致两个字符串的“ABD”部分被删除,但字符串的其余部分将保持不变 CEF 和 LKG 将是输出

def compare(input1,input2):
if len(input1) < len(input2):
    for i in input1:
        posi = int(input1.find(i))
        if input1[num] ==  input2[num]:
            x =   input1.replace(i,"" )
            y =  input2.replace(i,"" )
         num = num+1

    print(x)
    print(y)
else:
    for i in input2:
        num = 0
        posi = int(input2.find(i))
        if input2[num] ==  input1[num]:
            input1 =  input1[0:num] + input1[num+1:(len(input1)+ 1 )] # input1.replace(i,"" )
            input2 =  input2[0:num] + input2[num+1:(len(input1) + 1)]
            x = input1
            y = input2

        num = num + 1
print(str(x))
print(str(y))

【问题讨论】:

  • “......它停止工作”。问题是什么?它有什么作用?您是否收到错误堆栈跟踪,它只是停止,...?如果它停在较大的字符串上,您可以反转参数,使用较长的作为第一个字符串。
  • 你可以使用zip_longest from itertools ie [''.join(k) for k in zip(*[i for i in zip_longest("ABCDEF","ABLDKG",fillvalue = "") if i[0]!=i[1]])]
  • 它停止工作究竟是什么意思?请分享minimal reproducible example。顺便说一句,您的代码缩进看起来很糟糕。
  • 如果我用compare('asdfq', 'aqdez') 对其进行测试,它似乎甚至不适用于等长字符串,是吗...? (结果:sdfqqdez

标签: python python-3.x string substring


【解决方案1】:

你可以使用

from itertools import zip_longest
a,b = "ABCDEF","ABLDKG"
[''.join(k) for k in zip(*[i for i in zip_longest(a, b, fillvalue = "") if i[0]!=i[1]])]
['CEF', 'LKG']

您可以将其包装在一个函数中:

def compare(a, b):
    s = zip(*[i for i in zip_longest(a, b, fillvalue = "") if i[0]!=i[1]])
    return [''.join(k) for k in s]


 compare("ABCDEF","ABLDKG")
['CEF', 'LKG']

 compare('asdfq', 'aqdexyz')
['sfq', 'qexyz']

【讨论】:

  • 这确实有效,但有没有办法将返回的东西存储在变量中。如前所述,我是 python 新手,并试图将 ''.join(k) 存储在一个名为 X 的变量中,因为我稍后会需要它,但它只是说“x 未定义”
  • @HarvikKolla do X = compare("ABCDEF","ABLDKG")
【解决方案2】:
strlist = ["ABCDEF","ABLDKG"]
char_dict = dict()
for item in strlist:
    for char in item:
        char_dict[char] = char_dict.get(char,0) + 1
new_strlist = []
for item in strlist:
    new_strlist.append(''.join([char for char in item if char_dict[char] < 2]))

请注意,这会将只有重复的字符串转换为空字符串,而不是完全删除它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多