4 回答
TA贡献1797条经验 获得超4个赞
在那种情况下我会避免使用 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)
它可以使用一些列表理解来缩短,但我试图尽可能明确
TA贡献1829条经验 获得超4个赞
我觉得这可能是个问题。
while l_list[i] == r_list[i]: l_list.pop(i) r_list.pop(i)
这可以减少列表的大小,它可以低于i
.
如果 l_list = ["a"] 和 r_list = ["a"],请对此进行预演。
TA贡献1812条经验 获得超5个赞
在循环中修改列表通常不是一个好主意。这是一个更简洁、更 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']
TA贡献1864条经验 获得超6个赞
干得好:
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'))
输出:
False
添加回答
举报