Python 创建元组列表

Python 创建元组列表,python,python-3.x,list,tuples,append,Python,Python 3.x,List,Tuples,Append,我是一个给定的输入文件,其中包含要读取的数据值,数据以一对数字的形式给出,如: (1,2),(3,4),(3,5),(4,9)…等等 我必须阅读这些行中的每一行,将每一行变成一个元组,并将元组存储在一个列表中 到目前为止,我的代码是 def main(): tuples_list = [] for item in sys.stdin: item = tuple(item) tuples_list = tuples_list.append(item) 但是

我是一个给定的输入文件,其中包含要读取的数据值,数据以一对数字的形式给出,如: (1,2),(3,4),(3,5),(4,9)…等等

我必须阅读这些行中的每一行,将每一行变成一个元组,并将元组存储在一个列表中

到目前为止,我的代码是

def main():
tuples_list = []
    for item in sys.stdin:
        item = tuple(item)
        tuples_list = tuples_list.append(item)

但是,我必须忽略输入文件中的第一个数字,我不知道如何修改代码,使其只在输入文件之后开始存储值。不,这不起作用。你不应该做
a=a.append(b)
,只要
a.append(b)
。这项工作:

# file '1.py'
import sys

def main():
    tuples_list = []
    for item in sys.stdin:
        item = tuple(item)
        tuples_list.append(item)
    print(tuples_list)
main()
这将为您提供:

array([[1., 2.],
       [3., 4.],
       [5., 6.]])

这段代码比您将要编写的任何代码都要快(不,请参阅下面的注释),因为它使用C/Fortran编写的numpy函数,阅读起来更简单,它可以处理行中任意数量的数字,并且不需要调试。使用库通常比自己编写代码更好。

假设您的输入文件如下所示:


“这行得通吗?”这个问题可以通过运行代码来解决。你的“一对”数字是六个数字?请展示你的基准测试,证明“这段代码快多了…”,因为在中,它大约慢四倍。嗯,奇怪。我的机器上有以下内容。正如您所看到的,差异非常大,所以我甚至在1m23s中停止了纯python版本,numpy比纯python快得多。但是在您的基准代码中,不使用numpy会更快。可能是因为您使用了
map
line.split()
这两种语言,它们也是用C语言优化和编写的?您的
1.py
看起来怎么样?啊,我明白了。也许你的答案是这样的。它从
sys.stdin
读取。你没有输入任何东西,所以代码当然什么也没做。你等了1m23秒代码才完成,而代码却在等你给它一些数据。刚刚检查过-是的,我忘了添加
。如果输入正确,这段代码的运行速度会变慢,你是对的。这段代码也会这样做吗?def main():num=int(sys.stdin.readline())对于num中的行:num=line.rstrip()ls=[int(line)对于num.split(','))中的行]tuple_ls=tuple(ls)print(tuple_ls)@zenag,您不能将输入类型定义为int和put'、'或'。首先把它当作str,然后用正确的格式处理成int。我如何处理成int?我不明白?是不是这行“ls=[int(i)for i in str.split(',')]return tuple(ls)”@zenag我编辑了答案,检查这是否是您要找的。您好,我找到了谢谢您的帮助!
$ python 1.py <inp 
[('1', ' ', '2', ' ', '3', ' ', '4', ' ', '\n'), ('1', ' ', '2', ' ', '4', ' ', '3', '\n'), ('3', ' ', '3', ' ', '3', ' ', '3', '\n')]
# file inp.txt
1,2
3,4
5,6
import numpy as np
data = np.genfromtxt("inp.txt", delimiter=",")
print(data)
array([[1., 2.],
       [3., 4.],
       [5., 6.]])
import sys

def main():
    num = sys.stdin.readline()

    # Removing parantheses
    num = num.replace('(', '').replace(')', '')

    # creating list from input
    ls = [int(x) for x in num.split(',')]

    # Sublisting current list to form list of tuples
    sub = []
    tuples_ls = []

    for i in ls:
        sub += [i]
        
        if len(sub) == 2:
            tuples_ls.append(tuple(sub))
            sub = []

    return tuples_ls