【问题标题】:How to access the elements of a list/tuple in an arbitrary order? [duplicate]如何以任意顺序访问列表/元组的元素? [复制]
【发布时间】:2014-05-25 07:28:02
【问题描述】:

使用 Python 的切片运算符,例如可以实现:

a = [0, 10, 20, 30, 40, 50]
>>> a[0:5:2]
[0, 20, 40]

如果我想以任意顺序访问列表的元素,我该怎么办?我想做的是这样的:

>>> a([1,0,3,5]) #MATLAB notation!
[10, 0, 30, 50]

I know how to do this with numpy,但如果可能的话,我宁愿不导入任何包)。

【问题讨论】:

    标签: python list indexing tuples iterable


    【解决方案1】:

    你可以使用operator.itemgetter,像这样

    from operator import itemgetter
    print itemgetter(1, 0, 3, 5)(a)
    # (10, 0, 30, 50)
    

    您甚至可以将它存储在一个变量中,然后再使用它。例如,

    custom_picker = itemgetter(1, 0, 3, 5)
    custom_picker(a)
    

    【讨论】:

    • 这可能会比@sshashank124 的解决方案更快,因为operator 是用C 实现的,所以itemgetter 可能会胜过Python 循环。
    • 我接受了 sshashank124 的回答,因为它不需要导入,但很高兴知道,谢谢!虽然一个缺点是为了获得一份名单,似乎必须写:list(itemgetter(1, 0, 3, 5)(a))
    • @andreasdr 我不知道你的用例是什么,但实际上元组和列表几乎是一样的(除了元组是不可变的)
    • @andreasdr 另外,如果您要从这些特定索引中按顺序选择值,那么itemgetter 将是更好的选择。
    【解决方案2】:

    你可以按如下方式使用:

    b = [1,0,3,5]
    x = [a[i] for i in b]
    
    >>> x
    [10, 0, 30, 50]
    

    正如你所说,你宁愿不导入任何包。

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      相关资源
      最近更新 更多