Python - 用序数替换列表元素。

pythonserver side programmingprogramming更新于 2023/8/31 19:31:00

在本文中,我们将学习如何用序数替换任何给定的列表元素。我们将看到完成这项工作的各种方法。在此之前,我们先了解一下序数。

序数 − 在数学中,我们将序数称为表示序列中列表项的位置或原始顺序的数字。

以列表为例:[ 6, 8, 5, 3 ],因此这些数字的序数值为 −

  • 第一个元素 (6) 的序数值为 1。

  • 第二个元素 (8) 的序数值为 2。

  • 第三个元素 (5) 的序数值为 3。

  • 第四个元素 (3) 的序数值为 4。

让我们看看用序数替换列表项的各种方法。

方法 1。使用嵌套列表推导式和枚举。

示例

List_items = [[6, 8, 5, 3], [22, 52, 13], [11], [35], [61, 15]]
replaced_ordinal_list = [[idx] * len(sublist) for idx, sublist in enumerate(List_items)]
print(replaced_ordinal_list)

输出

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

解释

在上面的程序中我们使用嵌套列表推导。外部推导迭代 List_items 中的每个子列表,内部推导通过遍历每个内部子列表生成列表。

方法 2。使用嵌套循环。

示例

List_items = [[6, 8, 12, 15], [2, 5, 13], [1], [5, 5], [6, 15]]
replaced_ordinal_list = []
for idx, sublist in enumerate(List_items):
   ordinal_list = [idx] * len(sublist)
   replaced_ordinal_list.append(ordinal_list)
print(replaced_ordinal_list)

输出

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

解释

在上面的程序中,我们使用嵌套的 for 循环遍历每个子列表

在 List_items 中。在外层循环中遍历时,我们创建了序数列表,并将其索引乘以每个子列表的长度。

方法 3. 使用 While 循环进行列表推导。

示例

List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]]
replaced_ordinal_list= []
idx = 0
while idx < len(List_items):
   ordinal_list = [idx] * len(List_items[idx])
   replaced_ordinal_list.append(ordinal_list)
   idx += 1
print(replaced_ordinal_list)

输出

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

解释

在上面的程序中,我们使用 while 循环遍历 List_items 中的每个子列表。在外层循环中遍历时,我们创建了一个序数列表

方法 4. 使用字典和枚举。

示例

import numpy as np

List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]]
replaced_ordinal_list= [{idx: sublist} for idx, sublist in enumerate(List_items)]
print(replaced_ordinal_list)

输出

[{0: [6, 8, 12, 15]}, {1: [2, 5, 13]}, {2: [1]}, {3: [5, 2, 6]}, {4: [6, 15]}]

解释

在上面的程序中,我们为 List_items 中的每个子列表创建字典。此处索引 (idx) 充当键,子列表充当值。我们将结果字典存储在 replaced_ordinal_list 中。

方法 5. 使用带索引的列表理解。

在此方法中,我们将研究当我们想要将一个子列表表示为索引 0 并将下一个子列表表示为前一个子列表索引中的增量时的情况,然后了解如何有效地做到这一点。

示例

import numpy as np

List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]]
replaced_ordinal_list = [[idx] for idx, sublist in enumerate(List_items) for _ in sublist]
print(replaced_ordinal_list)

输出

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

解释

在上面的程序中,我们使用了嵌套循环的列表推导。外循环迭代 List_items 中的每个子列表,内循环重复子列表中每个元素的索引。

方法 6:使用递归

示例

def replace_ordinal_fun(List_items, ind=0):
   if not List_items:
      return []
   return [ind] * len(List_items[0]) + replace_ordinal_fun(List_items[1:], ind+1)

List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]]
replaced_ordinal_list = replace_ordinal_fun(List_items)
print(replaced_ordinal_list)

输出

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

解释

在上面的程序中,我们使用递归函数 replace_ordinal_fun 的概念将列表元素替换为其序数。这里,递归函数将输入参数作为项目列表和从 0 开始的索引。在每次递归中,它都会获取子列表并构造该列表的序数,然后在下一次递归调用中,它获取另一个子列表并再次构造该列表的序数。当输入列表为空时,它将返回,这可以作为递归函数的基本情况。

方法 7:使用生成器表达式。

示例

import numpy as np

List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]]
replaced_ordinal_list = list([idx] * len(sublist) for idx, sublist in enumerate(List_items))
print(replaced_ordinal_list)

输出

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

解释

在上面的程序中,我们在列表构造函数中使用了生成器表达式,该表达式用于通过将索引与每个子列表的长度相乘来生成列表。生成表达式后,我们将生成的生成器表达式转换为名为 replaced_ordinal_list 的列表。

因此,我们了解了多种方法,可以使用这些方法用其序数替换列表元素。每种方法都有自己的方法来查找序数。您可以选择适合您要求的方法,但了解各种方法对学习很有好处。


相关文章