在python IDLE中,我想从文本文件中的3列创建3个列表,其中包含以下数据集:
1.23 2.01 3.15
52.02 958.02 52.02
15.23 59.45 65.78
75.01 25.26 55.26
65.10 98.23 58.45
我想要这样的输出:
a = [1.23, 52.02, 15.23, 75.01, 65.10]
b = [2.01, 958.02, 59.45, 25.26, 98.23]
c = [3.15, 52.02, 65.78, 55.26, 58.45]
假设输入如下:
s = '1.23 2.01 3.15 52.02 958.02 52.02 15.23 59.45 65.78 75.01 25.26 55.26 65.10 98.23 58.45'
您可以将itertools.zip_longest
与zip
和iter
组合使用:
from itertools import zip_longest
a,b,c = zip(*zip_longest(*[iter(map(float, s.split()))]*3))
如果输入是3的倍数,则只能使用zip
:
a,b,c = zip(*zip(*[iter(map(float, s.split()))]*3))
输出:
>>> a,b,c
((1.23, 52.02, 15.23, 75.01, 65.1),
(2.01, 958.02, 59.45, 25.26, 98.23),
(3.15, 52.02, 65.78, 55.26, 58.45))
NB。实际上在itertools
文档中有一个配方(搜索"grouper")
工作原理:
它创建类似zip([<iterator>, <iterator>, <iterator>]])
,迭代器是相同的迭代器的引用。所以每次zip收集一个值,它都会在迭代器中取下一个值。如果迭代器是一个列表,则输出形状将是输入形状的3倍,但随着迭代器被消耗,最终的元素数量将保持不变(对乘数取模)。
首先,您可以使用列表推导式将它们分成一行的所有表
[line.split(' ') for line in open('s69498849.txt','r').read().split('n')]
[['1.23', '2.01', '3.15'], ['52.02', '958.02', '52.02'], ['15.23', '59.45', '65.78'], ['75.01', '25.26', '55.26'], ['65.10', '98.23', '58.45']]
然后,将列表压平
[i for o in [line.split(' ') for line in open('filename.txt','r').read().split('n')] for i in o]
['1.23', '2.01', '3.15', '52.02', '958.02', '52.02', '15.23', '59.45', '65.78', '75.01', '25.26', '55.26', '65.10', '98.23', '58.45']
然后使用切片来获取它们
data[::1]
['1.23', '52.02', '15.23', '75.01', '65.10']
现在都在一起;
data=[i for o in [line.split(' ') for line in open('filename.txt','r').read().split('n')] for i in o]
a=data[::1]
b=data[::2]
c=data[::3]
注意:如果你想控制或对它们做些什么,你可以改变
line.split(' ')
to[line.split(' ')[0],line.split(' ')[1],line.split(' ')[2]]
然后你可以对它们做任何事情,比如用int()
首先,您需要打开文件:
file = open("file name")
然后用空格将每行列成列表,并将每行分开:
line1 = file[0].split()
line2 = file[1].split()
line3 = file[2].split()
line4 = file[3].split()
line5 = file[4].split()
lines = [line1, line2, line3, line4, line5]
并使用每行的第一个元素创建列表:
a = []
for i in lines:
a.append(i[0])
b = []
for i in lines:
a.append(i[1])
c = []
for i in lines:
a.append(i[2])
和完成了!