gpt4 book ai didi

python - 从给定列表和给定索引中提取列表

转载 作者:行者123 更新时间:2023-11-30 23:09:35 25 4
gpt4 key购买 nike

我有一个列表,或多或少包含随机值。该列表始​​终具有固定长度。我有另一个包含整数值的列表。这些值始终小于第一个列表的长度。

我想计算一个列表,其中包含第一个列表中的所有值,其索引由第二个列表中的值描述。我想出了以下内容:

>>> values = ['000', '111', '222', '333', '444', '555', '666', '777']
>>> indices = [2, 4, 7]
>>> [v for i, v in enumerate(values) if i in indices]
['222', '444', '777']

由于我的列表相当小(24 个元素),这对我来说没问题。不管怎样,我想知道是否有一些更优雅的解决方案,不计算临时列表(使用 enumerate())。

最佳答案

>>> values = ['000', '111', '222', '333', '444', '555', '666', '777']
>>> indices = [2, 4, 7]
  1. 您可以使用简单的列表理解

    >>> [values[index] for index in indices]
    ['222', '444', '777']
  2. 您可以使用operator.itemgetter ,像这样

    >>> from operator import itemgetter
    >>> itemgetter(*indices)(values)
    ('222', '444', '777')
    >>> list(itemgetter(*indices)(values))
    ['222', '444', '777']
  3. 或者您可以使用 map 调用魔术方法 __getitem__,如下所示

    >>> map(values.__getitem__, indices)
    ['222', '444', '777']

    如果您使用的是 Python 3.x,那么您可能需要将 listmap 一起使用

    >>> list(map(values.__getitem__, indices))
    ['222', '444', '777']
  4. 如果您不想创建整个列表,则可以创建一个生成器表达式,并使用 next 来随时获取值。

    >>> filtered = (values[index] for index in indices)
    >>> next(filtered)
    '222'
    >>> next(filtered)
    '444'
    >>> next(filtered)
    '777'
    >>> next(filtered)
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    StopIteration

    如果您只想迭代结果,那么我建议使用生成器表达式方法。

    >>> for item in (values[index] for index in indices):
    ... print(item + ' ' + item)
    ...
    222 222
    444 444
    777 777

关于python - 从给定列表和给定索引中提取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com