在Python中,如果我有以下文件:
1 10
2 50
3 8
4 9
5 16
6 18
如何将这些数据保存在两个数组中?如此?
A = [1 2 3 4 5 6]
B = [10 50 8 9 16 18]
谢谢
答案 0 :(得分:2)
我们可以使用zip()
执行此操作。
此函数返回元组列表,其中
i
- 元组包含来自每个参数序列或迭代的i
元素。返回的列表的长度被截断为最短参数序列的长度。当有多个参数长度相同时,zip()
与map()
类似,初始参数为None。使用单个序列参数,它返回一个1元组的列表。没有参数,它返回一个空列表。
让我举例告诉你:
In [1]: filedata = """1 10
...: 2 50
...: 3 8
...: 4 9
...: 5 16
...: 6 18
...: """
In [2]: filedata
Out[2]: '1 10 \n2 50 \n3 8\n4 9\n5 16\n6 18\n'
In [3]: data = []
...: for line in fdata.splitlines():
...: lineParts = line.strip().split()
...: data.append(lineParts)
...:
In [4]: data
Out[4]: [['1', '10'], ['2', '50'], ['3', '8'], ['4', '9'], ['5', '16'], ['6', '18']]
In [5]: zip(*data)
Out[5]: [('1', '2', '3', '4', '5', '6'), ('10', '50', '8', '9', '16', '18')]
请注意,我们使用*data
代替data
,将列表中的每个元素解压缩为zip()
的单独参数。
请注意,现在我们有两个tuple()
的列表,您希望A
和B
成为列表,因此我们使用map()
进行操作,将tuple()
更改为list()
s:
In [15]: (A, B) = map(list, zip(*data))
In [16]: A
Out[16]: ['1', '2', '3', '4', '5', '6']
In [17]: B
Out[17]: ['10', '50', '8', '9', '16', '18']
修改:为清楚起见,完整代码位于:
filename = 'input.txt'
data = []
with open(filename, 'r') as fd:
for line in fd:
lineParts = line.strip().split()
data.append(lineParts)
(A, B) = map(list, zip(*data))
答案 1 :(得分:1)
初学者可以理解这个纯Python3代码:
#!/usr/bin/env python3
first = list()
second = list()
with open("/tmp/tmp.txt", "r") as data:
for a in data.readlines():
_1, _2 = a.split()
first.append(int(_1))
second.append(int(_2))
print("A =",first,"\nB =",second)
它会给你:
$ python3 /tmp/tmp.py
A = [1, 2, 3, 4, 5, 6]
B = [10, 50, 8, 9, 16, 18]