为什么列表不能用索引列表索引?

时间:2017-02-02 11:00:10

标签: python list indexing

我问这个问题与这个问题有关:

Access multiple elements of list knowing their index

基本上,如果你有一个列表并想要获得几个元素,你不能只传递一个索引列表。

示例:

a = [-2,1,5,3,8,5,6]
b = [1,2,5]             # list of indexes 
a[b]                    #this doesn't work
# expected output: [1,5,5]

为了解决这个问题,在链接问题中提出了几个选项:

使用列表理解:

a = [-2,1,5,3,8,5,6]
b = [1,2,5]
c = [a[i] for i in b]

使用operator.itemgetter

from operator import itemgetter 
a = [-2, 1, 5, 3, 8, 5, 6]
b = [1, 2, 5]
print itemgetter(*b)(a)

或使用numpy数组(可以接受带列表的索引)

import numpy as np
a = np.array([-2, 1, 5, 3, 8, 5, 6])
b = [1, 2, 5]
print list(a[b])

我的问题是:为什么普通名单不接受这个?这不会与正常索引[start:end:step]冲突,并且将提供另一种访问列表元素的方法,而无需使用外部库。

我不打算这个问题来吸引基于意见的答案,而是要知道是否有一个特定的原因,为什么这个功能在Python中不可用,或者是否将来会实现。

1 个答案:

答案 0 :(得分:0)

另一种获取预期输出的方法,可以将其实现为与list相关的python函数。

a = [-2,1,5,3,8,5,6]
b = [1,2,5]
def getvalues(original_list, indexes_list):
    new_list = []
    for i in indexes_list:
        new_list.append(original_list[i])
    return new_list
result = getvalues(a, b)
print(result)