如何在python中创建3个不同的TXT文件列表?



在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_longestzipiter组合使用:

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])

和完成了!

最新更新