gpt4 book ai didi

python - Differ.compare() 使用一次后结果消失

转载 作者:行者123 更新时间:2023-12-01 04:16:07 26 4
gpt4 key购买 nike

我试图通过使用 compare(a,b) 的结果来描述两个字符串之间的差异方法Differ difflib中定义的类在Python中。我正在使用compare(a,b)通过以下方式。

s1 = ["one",  "three", "twoo"]
s2 = ["one", "tow", "tree"]
d = difflib.Differ()
result = d.compare(s1, s2)

# without this for loop, the result is as expected
for r in result:
print(r)

desc = describe_diff(result)
for k, value in desc.items():
print(k, value)

我的问题是当我打印 result 时在将其传递给函数 describe_diff 之前我创建的,结果是错误的。但是当我注释掉打印 result 的 for 循环时,输出没问题。我尝试打印 result使用两个 for 循环,一个接一个,但它只打印一次。但是,当我插入compare(s1,s2)时在两个循环之间(或在打印循环和我的 describe_diff 函数调用之间)一切都很好。所以要使用result的值我必须不止一次执行 compare每次的方法?一定有办法解决这个问题。请帮忙。

最佳答案

这是因为 compare 为您提供了一个生成器对象,该对象在迭代一次后就会耗尽。如果您想多次使用结果,您可以将生成器转换为列表。

一次迭代后生成器将为空:

>>> from difflib import Differ
>>> s1 = ["one", "three", "twoo"]
>>> s2 = ["one", "tow", "tree"]
>>> result = Differ().compare(s1, s2)
>>> result
<generator object compare at 0x7f017de9f1b0>
>>> for x in result:
... pass
...
>>> list(result)
[]

将生成器转换为列表(在迭代之前):

>>> result = Differ().compare(s1, s2)
>>> list(result)
[' one', '+ tow', '- three', '? -\n', '+ tree', '- twoo']

请注意,将生成器转换到列表后,它将再次耗尽:

>>> result = Differ().compare(s1, s2)
>>> foo = list(result) # foo is now [' one', '+ tow', '- three', '? -\n', '+ tree', '- twoo']
>>> list(result)
[]

关于python - Differ.compare() 使用一次后结果消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com