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.
我有以下代码并遇到两个问题。
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.