Differ.compare() 的结果在使用一次后消失
Result of Differ.compare() vanishes after using once
我试图通过使用 Differ
class 中 difflib
中定义的 compare(a,b)
方法的结果来描述两个字符串之间的差异 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 循环时,输出正常。我曾尝试使用两个 for 循环一个接一个地打印 result
,但它只打印一次。但是,当我在两个循环之间(或打印循环和我的 describe_diff
函数调用之间)插入 compare(s1,s2)
时,一切都很好。因此,要多次使用 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)
[]
我试图通过使用 Differ
class 中 difflib
中定义的 compare(a,b)
方法的结果来描述两个字符串之间的差异 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 循环时,输出正常。我曾尝试使用两个 for 循环一个接一个地打印 result
,但它只打印一次。但是,当我在两个循环之间(或打印循环和我的 describe_diff
函数调用之间)插入 compare(s1,s2)
时,一切都很好。因此,要多次使用 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)
[]