数组中的Python第一个和最后一个元素

2024-04-26 00:49:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从数组中动态获取第一个和最后一个元素。

假设数组有6个元素。

test = [1,23,4,6,7,8]

如果我想得到first and last = 1,823,74,6。有没有办法让元素按这个顺序排列? 我看了几个问题。我通过这些链接找到了这个原型。。

#!/usr/bin/env python

import numpy

test = [1,23,4,6,7,8]
test1 = numpy.array([1,23,4,6,7,8])
len_test = len(test)
first_list = [0,1,2]
len_first = len(first_list)
second_list = [-1,-2,-3]
len_second = len(second_list)

for a in range(len_first):
        print numpy.array(test)[[first_list[a] , second_list[a]]]
        print test1[[first_list[a], second_list[a]]]

但如果你有6个以上的元素,这个原型就无法扩展。所以,我想知道是否有办法动态获取这对元素。

谢谢!


Tags: andtestnumpy元素len动态数组array
3条回答
>>> test = [1,23,4,6,7,8]
>>> from itertools import izip_longest
>>> for e in izip_longest(test, reversed(test)):
    print e


(1, 8)
(23, 7)
(4, 6)
(6, 4)
(7, 23)
(8, 1)

另一种选择

>>> test = [1,23,4,6,7,8]
>>> start, end = iter(test), reversed(test)
>>> try:
    while True:
        print map(next, [start, end])
except StopIteration:
    pass

[1, 8]
[23, 7]
[4, 6]
[6, 4]
[7, 23]
[8, 1]

我在这里结束了,因为我搜索了“python数组的第一个和最后一个元素”,找到了除此之外的所有东西。下面是标题问题的答案:

a = [1,2,3]
a[0] # first element (returns 1)
a[-1] # last element (returns 3)

怎么样:

In [10]: arr = numpy.array([1,23,4,6,7,8])

In [11]: [(arr[i], arr[-i-1]) for i in range(len(arr) // 2)]
Out[11]: [(1, 8), (23, 7), (4, 6)]

根据arr的大小,用NumPy编写整个东西可能更有效:

In [41]: arr = numpy.array([1,23,4,6,7,8]*100)

In [42]: %timeit [(arr[i], arr[-i-1]) for i in range(len(arr) // 2)]
10000 loops, best of 3: 167 us per loop

In [43]: %timeit numpy.vstack((arr, arr[::-1]))[:,:len(arr)//2]
100000 loops, best of 3: 16.4 us per loop

相关问题 更多 >