我有一个比较两个列表的功能,目的是删除两个列表中相同且位置相同的值。
def remove(l1, l2):
r = []
for char in range(len(l1)):
if l1[char] != l2[char]:
r.append(char)
return r
虽然这会返回不同字符的索引,但我不确定如何让它从l1返回字符。
remove(['S', 'T', 'U', 'V'], ['L', 'T', 'A', 'B'])
Expected:
['S', 'U', 'V']
Got:
[0, 2, 3]
提前致谢!
答案 0 :(得分:2)
这样可以,你只需要将l1中的字符添加到char中,而不是它们的索引:
def remove(l1, l2):
r = []
for char in range(len(l1)):
if l1[char] != l2[char]:
r.append(l1[char])
return r
答案 1 :(得分:2)
要添加到erlinska的答案,您可以使用列表理解和zip将解决方案缩减为单行。
[c1 for c1, c2 in zip(l1, l2) if c1 != c2]
请注意,这两个列表具有相同的长度。如果它们具有不同的长度,则zip将仅返回n个元组,其中n是两个列表的最小长度。这意味着如果l1
中的相同索引中没有项目,您可能会错过l2
中的项目。
在上面的代码中,如果l2
短于l1
,您将遇到异常。
答案 2 :(得分:1)
简单使用zip:
def remove(l1, l2):
return [first for first, second in zip(l1, l2) if first != second]
产生第一个列表中的项目:
remove(['S', 'T', 'U', 'V'], ['L', 'T', 'A', 'B'])
['S', 'U', 'V']