Python - 用序数替换列表元素。
在本文中,我们将学习如何用序数替换任何给定的列表元素。我们将看到完成这项工作的各种方法。在此之前,我们先了解一下序数。
序数 − 在数学中,我们将序数称为表示序列中列表项的位置或原始顺序的数字。
以列表为例:[ 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 的列表。
因此,我们了解了多种方法,可以使用这些方法用其序数替换列表元素。每种方法都有自己的方法来查找序数。您可以选择适合您要求的方法,但了解各种方法对学习很有好处。