我的最终结果是:我需要一个zip_longest()的变体,给定任意数量的序列,将它们并排生成,当它们不完全相同时,用None填充空白。在
处理文件时的并行方式是键入 vimdiff文件1,文件2,文件3。。。。在
例如,给定序列
a = ["foo", "bar", "baz", "asd"]
b = ["foo", "baz"]
c = ["foo", "bar"]
我需要一个生成这些元组的函数:
^{pr2}$我很简单地用difflib.SequenceMatcher. 但是,它只适用于两个序列:
from difflib import SequenceMatcher
def zip_diff2(a, b, fillvalue=None):
matches = SequenceMatcher(None, a, b).get_matching_blocks()
for match, next_match in zip([None] + matches, matches + [None]):
if match is None:
# Process disjoined elements before the first match
for i in range(0, next_match.a):
yield a[i], fillvalue
for i in range(0, next_match.b):
yield fillvalue, b[i]
else:
for i in range(match.size):
yield a[match.a + i], b[match.b + i]
if next_match is None:
a_end = len(a)
b_end = len(b)
else:
a_end = next_match.a
b_end = next_match.b
for i in range(match.a + match.size, a_end):
yield a[i], fillvalue
for i in range(match.b + match.size, b_end):
yield fillvalue, b[i]
如何让它在任意数量的序列上工作?在
为了达到你想要的效果,我认为有必要首先用给定序列中所有可能的值创建一个基序列。为此,我做了代码:
你可以使用你的函数,多次调用它。我认为
^{pr2}$difflib.SequenceMatcher
的用法太复杂了,所以我编写了自己的代码:这有点像一个新手/傻瓜/天真的代码,但是,嘿,它做到了!在
我希望这对你有所帮助。在
相关问题 更多 >
编程相关推荐