原因是您使用了update方法而不是add方法。从python docs:
我得到了这样的txt文件:
1.0 5.0
2.0 8.0
3.5 12.5
我需要获取这些值,并使其成为一个集合中的元组我的输出应该是:
[(1.0, 5.0), (2.0, 8.0), (3.5, 12.5)]
坚持执行此操作,仅在可能的情况下使用简单的python。
到目前为止,这是我的代码:
import sys
def read_points(filename: str) -> Set[Tuple[float, float]]:
file = open(filename)
lines = file.readlines()
lines = [item.strip("\n") for item in lines]
newList = set()
for item in lines:
item = item.split(" ")
item = tuple(float(items) for items in item)
newList.update(item)
file.close()
print (newList)
我一直在获取'NoneType'对象,这是不可迭代的,而且我不知道为什么任何帮助将不胜感激。
您的代码不会为我引发异常,但不会按您期望的方式工作。当您调用newList.update(item)
方法时,实际上是在该元组中添加要设置的每个元素,而不是添加整个元组。正确的代码是
newList.add(item)
错误的堆栈跟踪总是表明发生错误的那一行,但是根据您的消息,需要此信息才能更好地理解问题,但是根据您提供的信息,我可以确定问题何时发生了。某事试图在None上进行迭代,在这种情况下,此操作无效,因为NoneType是不可迭代的。
这种情况可能在代码的以下位置发生:
lines = [item.strip("\n") for item in lines]
如果行为无,则>
for item in lines:
如果行为无,则>
item = tuple(float(items) for items in item)
如果项目为无。
您需要确保文件名指向存在的文件的前两个,否则readlines()不会读取任何内容
现在,对于您要实现的目标,您正在朝正确的方向前进。我有一些自己的问题。为什么要设置newList?为了简单起见,我将完全使用列表。我假设您将从现在开始使用列表,其余的解决方案可能看起来像这样:
>>> newList = [1.0, 5.0, 2.0, 8.0, 3.5, 12.5] >>> it = iter(newList) >>> solution = {(x,y) for x,y in zip(it,it)} >>> solution set([(1.0, 5.0), (3.5, 12.5), (2.0, 8.0)])
希望对您有帮助。
原因是您使用了update方法而不是add方法。从python docs:
s.update(t)-返回从s添加元素的set ss.add(x)-将元素x添加到set s
您可以像这样轻松地修改代码:
import sys
from typing import Tuple, Set
def read_points(filename: str) -> Set[Tuple[float, float]]:
file = open(filename)
lines = file.readlines()
lines = [item.strip("\n") for item in lines]
newList = set()
for item in lines:
item = item.split(" ")
item = tuple(float(items) for items in item)
newList.add(item)
file.close()
print (newList)
原因是您使用了update方法而不是add方法。从python docs: