我怎么可以把每隔一个项目数组包含这两个项目的子阵

问题描述 投票:0回答:5

我有一堆x和y坐标的在文本文件中,其中,每第二个数字是一个X- / y坐标(如下所示)。我已经写的数字到一个数组,但现在我不得不在每个第二编号的数组分成子阵列,包含x和y坐标。我该怎么做呢?

coordinates.txt

 x  y  x  y  x  y
10 30 40 50 60 70
python
5个回答
0
投票

假设你的数组总是以X制成,y对,(即LEN(阵列)始终是2的倍数),那么你可以这样做:

a = [10,30,40,50,60,70]
xy_pairs = [a[n:n+2] for n in range(len(a)) if not n%2]

>>> print(xy_pairs)
[[10, 30], [40, 50], [60, 70]]

如果你想保持x和分离的y值,那么你可以这样做:

xs = [a[n] for n in range(len(a)) if not n%2]
ys = [a[n] for n in range(len(a)) if n%2]

>>> print(xs)
[10, 40, 60]
>>> print(ys)
[30, 50, 70]

后者也可以使用,而不是被认为是更Python enumerate(a) range(len(a))来完成。

xs = [n for i,n in enumerate(a) if not i%2]
ys = [n for i,n in enumerate(a) if i%2]

3
投票

您可以使用zip和切片容易做到这一点:

zip(numbers[::2], numbers[1::2])

numbers[::2]只需偶数指数(在0开始明显),而[1::2]取奇数的。 zip“对”两个列表的元素。

需要注意的是zip产生的迭代器。如果你想获得它的实际列表呼叫list

>>> list(zip(numbers[::2], numbers[1::2]))
[(10, 30), (40, 50), (60, 70)]

0
投票

你可以使用一些魔法itertools:

from itertools import izip_longest

data = "10 30 40 50 60 70"

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

for x,y in grouper(data.split(" "), 2):
    print(x, y)

这将产生

('10', '30')
('40', '50')
('60', '70')

original website无耻地抄袭,还看到a demo on ideone.com


0
投票

尝试列表解析方法中,通过使用2的步骤的规模的原始列表。

op_list = [10,30,40,50,60,70]
new_list = [[op_list[i], op_list[i+1]] for i in range(0, len(op_list), 2)]
print new_list

输出:

[[10, 30], [40, 50], [60, 70]]

0
投票

您可以使用该功能zip()于迭代:

l = [10,30,40,50,60,70]

l = iter(l)
l = [[i, j] for i, j in zip(l, l)]
# [[10, 30], [40, 50], [60, 70]]
© www.soinside.com 2019 - 2024. All rights reserved.