我正在阅读一个文本文件,其中包含几个列表,每个列表都有自己的行。给定列表中的元素是非整数x,y坐标,需要放入数组中,以便:
[x1,y1,x2,y2,x3,y3,.... xn,yn]
变为:
x1 x2 x3 .... xn
y1 y2 y3 .... yn
但是在同一个2d阵列中。
我对编码很新,尝试了各种方法,但无济于事。现在我循环遍历坐标对的数量,并尝试在循环中追加值但不确定如何执行此操作。
这就是我开始的方式:
with open('textfile.txt', 'r') as infile:
for line in infile:
array=[]
number=(line.count(" ")+1)/2 #number of x,y pairs in list
for i in range(0, number-1):
现在我不知道从哪里开始,所以任何帮助都将不胜感激!感谢
答案 0 :(得分:1)
由于您不熟悉python并且处理数值数据,因此您可能需要考虑事实上的标准模块进行此类操作,numpy
。有了它,你的问题就变得微不足道了:
import numpy as np
A = [1,2,3,4,5,6,7,8]
print np.array(A).reshape((len(A)/2,2)).T
>>> [[1 3 5 7]
[2 4 6 8]]
在这里,我们将列表转换为numpy数组np.array
,reshape
将其转换为我们想要的大小,并将转置T
从(x1,y1),(x2,y2),...
转换为{{ 1}}。
答案 1 :(得分:0)
您可以使用2
列表切片作为其步骤:
>>> l=['x1', 'y1', 'x2', 'y2', 'x3', 'y3']
>>> l[0::2]
['x1', 'x2', 'x3']
>>> l[1::2]
['y1', 'y2', 'y3']
或者您可以使用itertools.cycle
并使用next()
抛出您的列表:
>>> from itertools import cycle
>>> l=['x1', 'y1', 'x2', 'y2', 'x3', 'y3']
>>> c=cycle(l)
>>> l1=[]
>>> l2=[]
>>> for i in range(len(l)/2):
... l1.append(c.next())
... l2.append(c.next())
...
>>> l1
['x1', 'x2', 'x3']
>>> l2
['y1', 'y2', 'y3']
答案 2 :(得分:0)
如果你有一个像
这样的清单a = [1,2,3,4]
你可以做到
b = [a[0:len(a)-1:2], a[1:len(a):2]]
将返回一个包含两个列表的列表(一种2D python数组)
>>> [[1, 3], [2, 4]]
如果您确定阵列的长度是均匀的,那么这实际上是有效的。
答案 3 :(得分:0)
假设a
是您的给定列表。然后,您可以为单独的列表调用这两个命令:
b=[a [i] for i in range (len (a)) if i % 2==0]
c=[a [i] for i in range (len (a)) if i % 2==1]
答案 4 :(得分:0)
def grouper(iterable,n):
return zip(*([iter(iterable)]*n))
print grouper(range(9),3)
# [(0, 1, 2), (3, 4, 5), (6, 7, 8)]
# if len(iterable)%n : truncation
print grouped(range(14),3)
# [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]