Python|用它的序号替换列表元素
给定一个列表列表,编写一个Python程序,将内部列表中的值替换为其序数值。
例子:
Input : [[1, 2, 3], [ 4, 5, 6], [ 7, 8, 9, 10]]
Output : [[0, 0, 0], [1, 1, 1], [2, 2, 2, 2]]
Input : [['a'], [ 'd', 'e', 'b', 't'], [ 'x', 'l']]
Output : [[0], [1, 1, 1, 1], [2, 2]]
方法#1:朴素的方法
此方法是一种单线 Naive 方法,其中我们使用两个使用i和j变量的 for 循环,并遍历每个内部列表以将其替换为第i个序数。
# Python3 program to Replace element
# in a list with its ordinal number
def replaceOrdinal(lst):
return [[i for j in range(len(lst[i]))]
for i in range(len(lst))]
# Driver Code
lst = [[1, 2, 3], [ 4, 5, 6], [ 7, 8, 9, 10]]
print(replaceOrdinal(lst))
输出:
[[0, 0, 0], [1, 1, 1], [2, 2, 2, 2]]
方法#2: Pythonic Naive
这是另一种幼稚的方法,但更Pythonic 。对于每个内部列表,它返回第 i个位置(这是它的序数),然后将其乘以该特定内部列表的长度,以返回所需的输出。
# Python3 program to Replace element
# in a list with its ordinal number
def replaceOrdinal(lst):
return [[i]*len(lst[i]) for i in range(len(lst))]
# Driver Code
lst = [[1, 2, 3], [ 4, 5, 6], [ 7, 8, 9, 10]]
print(replaceOrdinal(lst))
输出:
[[0, 0, 0], [1, 1, 1], [2, 2, 2, 2]]
方法 #3:使用Python enumerate()
方法
我们可以将列表推导与Python enumerate()
一起使用。此方法将计数器添加到可迭代对象并以枚举对象的形式返回。此计数器索引将用作序号。因此,我们为内部子列表的每个元素返回相应的计数器索引。
# Python3 program to Replace element
# in a list with its ordinal number
def replaceOrdinal(lst):
return [[idx for _ in sublist]
for idx, sublist in enumerate(lst)]
# Driver Code
lst = [[1, 2, 3], [ 4, 5, 6], [ 7, 8, 9, 10]]
print(replaceOrdinal(lst))
输出:
[[0, 0, 0], [1, 1, 1], [2, 2, 2, 2]]
方法 #4:使用enumerate()
的替代方法
在这里,我们在与上述方法类似的方法中使用Python enumerate()
,但不是另一个循环,而是遵循方法 #4来生成内部列表。
# Python3 program to Replace element
# in a list with its ordinal number
def replaceOrdinal(lst):
return [[index] * len(sublist) for index,
sublist in enumerate(lst)]
# Driver Code
lst = [[1, 2, 3], [ 4, 5, 6], [ 7, 8, 9, 10]]
print(replaceOrdinal(lst))
输出:
[[0, 0, 0], [1, 1, 1], [2, 2, 2, 2]]