ValueError 使用 itertools.zip_longest(填充值)?

ValueError using itertools.zip_longest (fillvalue)?

我有以下代码并遇到两个问题。

import itertools

data_1 = [(1, '1', '2', '3'), (2, '4', '5', '6')]
data_2 = [(1, '7', '8', '9')]

for (a, b) in itertools.zip_longest(data_1, data_2, fillvalue="----"):
    p = (a[0], a[1], a[2], a[3], b[0], b[1], b[2], b[3])
    print("p", p)
    value1 = float(p[1])+float(p[2])+float(p[3])
    print("value1", value1)

我的第一个问题是,当我使用 fillvalue="----" 时,它就可以工作了。为什么当我使用 fillvalue="-" 时它不起作用?

我的第二个问题是,当我在 value1 行下方添加额外的一行 (value2 = float(p[4])+float(p[5])+float(p[6])) 时,它给出以下错误消息:

value2 = float(p[4])+float(p[5])+float(p[6]) p (2, '4', '5', '6', '-', '-', '-', '-') ValueError:无法将字符串转换为浮点数:'-'

我的解决方案是什么,我该如何解决这个问题?

首先,想一想“zip_longest”的作用。它类似于 zip() 函数,但如果它到达最短迭代器的末尾则不会终止,而是继续最长的末尾并用 fillvalue.

填充较短的迭代器

指定 fillvalue="-" 时出现的错误:

您的第一个迭代器是 data_1,里面有一个项目,第二个是 data_2,里面有两个项目。 b 在解包后从 data_2 中获取项目。在第二次迭代中,它得到 fillvalue"-"。关键是 "-" 现在实际上是你的整个 b 并且只有一个字符所以你不能做 b[1], b[2] 等等

我想你已经明白你的第二个问题了。在第二次迭代中(当你使用 "----" 时),虽然你可以获得项目 p[4]p[5] 和...它不能将 "-" 转换为 float.