我想从一个已经存在的嵌套列表中创建一个新的嵌套列表。此新列表应包括现有列表的索引+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]]
如何创建这样的列表?
答案 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]]