Python - 用序号替换列表元素。
在本文中,我们将学习如何用其序号替换任何给定的列表元素。我们将看到完成此工作的各种方法。在此之前,让我们了解一下序数。
序数 - 在数学中,我们将序数称为表示序列中列表项的位置或原始顺序的数字。
举一个列表的例子:[ 6, 8, 5, 3 ],这些数字的序数值将是 -
第一个元素 (6) 的序数值为 1。
第二个元素 (8) 的序数值为 2。
第三个元素 (5) 的序数值为 3。
第四个元素 (3) 的序数值为 4。
让我们看看用序数替换列表项的各种方法。
方法 1. 使用嵌套列表推导式结合 enumerate。
示例
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. 使用字典和 enumerate。
示例
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 的列表。
因此,我们了解了多种方法,可以使用这些方法用其序号替换列表元素。每种方法都有其自己的方法来查找序数。您可以选择适合您需求的方法,但了解各种方法对于学习来说是件好事。