【问题标题】:Create a list from another list indexes从另一个列表索引创建列表
【发布时间】:2018-03-25 19:01:50
【问题描述】:

有没有一种 Python 的方法可以从另一个列表的索引创建一个列表?我正在尝试从另一个索引创建一个列表。我读到enumerate() 可用于遍历给定列表的索引和值。但真的不知道如何在我的情况下应用它。

就我而言,过程如下所示:

list_1 = [11,10,7,0,3,5,8,1,4,6,9,2]

第二个列表应该包含第一个的索引,但从下一个索引开始,除了索引 0。例如,对于 list_1 中包含值 11 的索引 0,下一个值将是 12,但它不存在于list_1 所以下一个值是 0,它实际上是最小值,所以 list_2 中索引 0 的值将是 list_1 的索引,它包含值 0,在这种情况下为 3。对于 list_1 中的索引 1,值是10,因此 list_2 中索引 1 的值将是包含值 11 (10+1) 的索引,在本例中为 0。因此 list_2 为:

list_2 =[3,0,6,7,8,9,10,11,5,2,1,4]

【问题讨论】:

  • 你有“非pythonic”的解决方案吗?请发布您的代码。
  • 这个问题可以解释得更好,但绝对可以解决。

标签: python list indexing


【解决方案1】:

这个 sn-p 应该做你所要求的(以 pythonic/explicit 方式):

list_1 = [11, 10, 7, 0, 3, 5, 8, 1, 4, 6, 9, 2]

# keep the indexes of every element
indexes = {v: idx for idx, v in enumerate(list_1)}
# return the index of every next element - if there isn't, return the index for 0
list_2 = [indexes.get(v+1, indexes[0]) for v in list_1]

【讨论】:

    【解决方案2】:

    或者,您可以使用index() 方法检索每个元素的索引+1:

    [list_1.index(e+1) if e+1 in list_1 else list_1.index(0) for e in list_1]
    

    【讨论】:

    • 这个答案是正确的,但它可能比字典方法慢 O(n^2) 慢~O(n)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多