我需要帮助将txt文件中的值添加到一组元组中

问题描述 投票:0回答:3

我得到了这样的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'对象,这是不可迭代的,而且我不知道为什么任何帮助将不胜感激。

python file floating-point set tuples
3个回答
2
投票

您的代码不会为我引发异常,但不会按您期望的方式工作。当您调用newList.update(item)方法时,实际上是在该元组中添加要设置的每个元素,而不是添加整个元组。正确的代码是

newList.add(item)

1
投票

错误的堆栈跟踪总是表明发生错误的那一行,但是根据您的消息,需要此信息才能更好地理解问题,但是根据您提供的信息,我可以确定问题何时发生了。某事试图在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) 

0
投票

原因是您使用了update方法而不是add方法。从python docs

© www.soinside.com 2019 - 2024. All rights reserved.