ValueError 使用 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,'6','-','-') 值错误:无法将字符串转换为浮点数:'-'

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

解决方法

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

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

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

我想您对第二个问题有所了解。在第二次迭代中(当您使用 "----" 时),虽然您可以获得项目 p[4]p[5] 和...但它无法将 "-" 转换为浮动。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...