微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ValueError 使用 itertools.zip_longest (fillvalue)?

如何解决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] 和...但它无法将 "-" 转换为浮动。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?