嵌套列表-使用索引作为项目创建新的嵌套列表

时间:2018-10-10 13:05:14

标签: python python-3.x list

我想从一个已经存在的嵌套列表中创建一个新的嵌套列表。此新列表应包括现有列表的索引+1。

示例:

my_list = [[20, 45, 80],[56, 29],[76],[38,156,11,387]]

结果:

my_new_list = [[1,2,3],[1,2],[1],[1,2,3,4]]

如何创建这样的列表?

5 个答案:

答案 0 :(得分:3)

保存python循环,并在列表推导中强制range(对于python 3而言)迭代,因此它比传统的双嵌套推导要快:

my_list = [[20, 45, 80],[56, 29],[76],[38,156,11,387]]

index_list = [list(range(1,len(x)+1)) for x in my_list]

答案 1 :(得分:2)

有几种方法可以做到这一点,但首先想到的是在嵌套列表推导中枚举起始索引为1的元素。

>>> [[index for index, value in enumerate(sub, 1)] for sub in my_list]
[[1, 2, 3], [1, 2], [1], [1, 2, 3, 4]]

答案 2 :(得分:0)

使用嵌套列表理解

首先,您需要一个列表,其中每个数字的范围是1到子列表的长度。使用list comprehension可以使用多种方法。

例如

[i for i in range(1, len(sublist) + 1)]

[i + 1 for i in range(len(sublist))]

第二,您要对my_list中的每个子列表执行此操作。因此,您必须使用嵌套列表理解:

>>> my_list = [[20, 45, 80],[56, 29],[76],[38,156,11,387]]
>>> my_new_list = [[i+1 for i in range(len(sublist))] for sublist in my_list]
>>> my_new_list
[[1, 2, 3], [1, 2], [1], [1, 2, 3, 4]]

使用范围范围内的列表理解

另一种方法是将range built-in function用作子列表的生成器:

>>> [list(range(1, len(sublist) + 1)) for sublist in my_list]
[[1, 2, 3], [1, 2], [1], [1, 2, 3, 4]]

使用范围内的地图

或者您可以使用map built-in function

>>> list(map(
...     lambda sublist: list(range(1, len(sublist) + 1)),
...     my_list
... ))
[[1, 2, 3], [1, 2], [1], [1, 2, 3, 4]]

答案 3 :(得分:0)

另一个解决方案可能是:

new_list = [list(range(1,len(item)+1)) for item in my_list]

答案 4 :(得分:0)

以下是一些简单的解决方案:

>>> lst = [[20, 45, 80],[56, 29],[76],[38,156,11,387]]   
>>> out = [[x+1 for x,_ in enumerate(y)] for y in lst]
>>> out
[[1, 2, 3], [1, 2], [1], [1, 2, 3, 4]]
>>>
>>>
>>> out = [[x+1 for x in range(len(y))] for y in lst]
>>> out
[[1, 2, 3], [1, 2], [1], [1, 2, 3, 4]]