[英]Remove equal characters from two python strings
我正在编写 Python 代码,以从位于相同索引上的两个字符串中删除相同的相同字符。 例如remove_same('ABCDE', 'ACBDE')
应该使 arguments 成为 BC 和 CB。 我知道字符串在这里是不可变的,所以我将它们转换为列表。 我收到了一个超出索引的错误。
def remove_same(l_string, r_string):
l_list = list(l_string)
r_list = list(r_string)
i = 0
while i != len(l_list):
print(f'in {i} length is {len(l_list)}')
while l_list[i] == r_list[i]:
l_list.pop(i)
r_list.pop(i)
if i == len(l_list) - 1:
break
if i != len(l_list):
i += 1
return l_list[0] == r_list[0]
我觉得这可能是个问题。
while l_list[i] == r_list[i]:
l_list.pop(i)
r_list.pop(i)
这可以减少列表的大小,它可以 go 低于i
。
如果 l_list = ["a"] 和 r_list = ["a"],请对此进行试运行。
在这种情况下,我会避免使用 while 循环,我认为这是一个更好、更清晰的解决方案:
def remove_same(s1, s2):
l1 = list(s1)
l2 = list(s2)
out1 = []
out2 = []
for c1, c2 in zip(l1, l2):
if c1 != c2:
out1.append(c1)
out2.append(c2)
s1_out = "".join(out1)
s2_out = "".join(out2)
print(s1_out)
print(s2_out)
可以使用一些列表推导来缩短它,但我试图尽可能明确
在循环中修改列表通常不是一个好主意。 这是一个更干净、更 Pythonic 的解决方案。 两个字符串被压缩并并行处理。 每对相等的字符被丢弃,剩下的字符被排列成新的字符串。
a = 'ABCDE'
b = 'ACFDE'
def remove_same(s1, s2):
return ["".join(s) for s
in zip(*[(x,y) for x,y in zip(s1,s2) if x!=y])]
remove_same(a, b)
#['BC', 'CF']
这里是 go:
def remove_same(l_string, r_string):
# if either string is empty, return False
if not l_string or not r_string:
return False
l_list = list(l_string)
r_list = list(r_string)
limit = min(len(l_list), len(r_list))
i = 0
while i < limit:
if l_list[i] == r_list[i]:
l_list.pop(i)
r_list.pop(i)
limit -= 1
else:
i += 1
return l_list[0] == r_list[0]
print(remove_same('ABCDE', 'ACBDE'))
Output:
False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.