【问题标题】:How to replace the value in a list with their ordinal number?如何用它们的序号替换列表中的值?
【发布时间】:2019-06-04 00:04:00
【问题描述】:

我有一个清单:

a = [[6, 8, 12, 15], [2, 5, 13], [1], [5], [6, 15]]

我想将内部列表中的所有值替换为它们的序数值,例如:

b = [[0, 0, 0, 0], [1, 1, 1], [2], [3], [4, 4]]

我试过了:

for jj in a:
    for uu in range(0, len(jj)):
        for k,q in enumerate(a):
            jj[uu] == k

它没有输出我想要的列表。我怎样才能做到这一点?

【问题讨论】:

    标签: python python-3.x for-loop replace


    【解决方案1】:

    这是你想要的输出吗?

    In [1]: a = [[6, 8, 12, 15], [2, 5, 13], [1], [5], [6, 15]]
    
    In [2]: b = [[idx] * len(sublist) for idx, sublist in enumerate(a)]
    
    In [3]: b
    Out[3]: [[0, 0, 0, 0], [1, 1, 1], [2], [3], [4, 4]]
    

    这个答案也比使用 range(len(a)) 的版本更 Pythonic。

    【讨论】:

      【解决方案2】:

      也许这会有所帮助。

      [[i]*len(a[i]) for i in range(len(a))]
      

      输出:

      [[0, 0, 0, 0], [1, 1, 1], [2], [3], [4, 4]]
      

      【讨论】:

        【解决方案3】:

        让我们使用列表推导来解决这个问题 -

        a = [[6, 8, 12, 15], [2, 5, 13], [1], [5], [6, 15]]
        b = [[i for j in range(len(a[i]))] for i in range(len(a))]
        b
            [[0, 0, 0, 0], [1, 1, 1], [2], [3], [4, 4]]
        

        【讨论】:

          【解决方案4】:

          其他答案很好,这是另一个也有效的列表理解:

          >>> a = [[6, 8, 12, 15], [2, 5, 13], [1], [5], [6, 15]]
          >>> b = [[i for _ in y] for i, y in enumerate(a)]
          >>> b
          [[0, 0, 0, 0], [1, 1, 1], [2], [3], [4, 4]]
          

          【讨论】:

            猜你喜欢
            • 2018-01-09
            • 2021-04-24
            • 2011-10-26
            • 2021-04-24
            • 1970-01-01
            • 1970-01-01
            • 2020-08-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多