📌  相关文章
📜  Python|用它的序号替换列表元素

📅  最后修改于: 2022-05-13 01:55:18.762000             🧑  作者: Mango

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 方法,其中我们使用两个使用ij变量的 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]]