Python 创建元组列表
我是一个给定的输入文件,其中包含要读取的数据值,数据以一对数字的形式给出,如: (1,2),(3,4),(3,5),(4,9)…等等 我必须阅读这些行中的每一行,将每一行变成一个元组,并将元组存储在一个列表中 到目前为止,我的代码是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) 但是
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