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
添加回答
舉報