Python – 嵌套和混合列表中的类型转换




Python – 嵌套和混合列表中的类型转换

Python今天得到广泛使用和接受,因为它的多功能性和可读性。它强大的功能使得开发人员可以轻松执行复杂的任务。其中一个必要的特性是类型转换或类型转换。特别是对于Python列表来说,由于它们的异构性通常需要将每个嵌套列表元素或列表转换为特定的数据类型以供使用。在混合列表中,它变得更加复杂。

在本文中,我们将尝试理解并在嵌套和混合列表中实现类型转换。通过代码,我们将解码Python的功能来实现相同的功能。

在开始使用列表之前,我们需要了解类型转换或类型转换。在Python中,类型转换指根据方便或可行性将值或变量的数据类型转换。Python有几个内置函数来促进类型转换,在处理嵌套和混合列表时非常有用。



嵌套和混合列表

当一个列表包含在另一个列表中时,称为嵌套列表。这些嵌套列表可以包含更多嵌套列表作为元素,遵循分层顺序。在处理嵌套列表时,特别是在类型转换中,了解类型转换将如何影响整个结构是必要的。

混合列表保持了Python列表的异构性。它是一个包含不同数据类型(如整数,浮点数,列表,元组等)的列表。在混合列表中处理类型转换需要稍微不同的方法。我们需要独立处理每个元素并将其转换为所需的类型。

嵌套和混合列表中的类型转换是将子列表或元组或任何可迭代的元素转换为所需的类型,以保持整个列表的原始结构。现在,让我们逐个看一些方法。

方法1:列表推导式

列表推导式是嵌套列表中元素的类型转换的一种非常简单和优雅的方式。它允许我们通过每个元素的迭代并应用所需的类型转换操作来创建一个新的嵌套列表。

例子

listEnter = [6, 5, [1,2], 3]
print("List entered: "+ str(listEnter))

result = [[str(ele) for ele in sublist] if isinstance(sublist, list) else str(sublist) for sublist in listEnter]
print("After conversion: "+ str(result))

输出结果

List entered: [6, 5, [1, 2], 3]
After conversion: ['6', '5', ['1', '2'], '3']

因此,我们使用了一个语句,在其中如果子列表的每个元素属于主列表,则对其进行迭代并转换为字符串。否则,从主列表中获取元素并将其转换为字符串。通过这种方式,保留了原始结构,但每个元素都进行了转换。

方法#2:使用递归

使用递归或使用For循环,迭代每个元素并根据我们的需求明确进行转换。可以定义一个函数来迭代并转换这些元素。在此过程中,我们需要检查是否有内部列表、元组或其他可迭代对象,其中我们可以递归调用该函数以迭代每个嵌套列表或元组等,并在混合列表中将它们内部的每个元素进行转换。因此,我们将编写代码并加以理解。

示例

def typeCast(listInput):
    if isinstance(listInput, list):
        return [typeCast(inputItem) for inputItem in listInput]
    else:
        return str(listInput)

listEnter = [6, 5, [1,2], 3]
print("List entered: "+ str(listEnter))

result = typeCast(listEnter)
print("After conversion: "+ str(result))

输出结果

List entered: [6, 5, [1, 2], 3]
After conversion: ['6', '5', ['1', '2'], '3']

所以,typeCast()递归函数显然会遍历列表的每个元素。当元素本身是一个列表时,函数会将该列表传递给自身。否则,它会将元素转换为字符串。

然后这个过程继续进行。在理解嵌套列表中的递归实现之后,让我们来看看在混合列表中如何使用它的可能方式。

示例

def typeCast(inputEle):
    if isinstance(inputEle, list):
        return [typeCast(ele) for ele in inputEle]
    elif isinstance(inputEle, tuple):
        return tuple(typeCast(ele) for ele in inputEle)
    else:
        return int(inputEle)

def typeCast2(inputEle):
    if type(inputEle) is list:
        return [typeCast2(ele) for ele in inputEle]
    elif type(inputEle) is tuple:
        return tuple(typeCast2(ele) for ele in inputEle)
    else:
        return int(inputEle)

listInput = ['1', '2', ('3', ['4', '5']), ['6', '7']]
print("Input list is: " + str(listInput))

res1 = typeCast(listInput)
print("Using isinstance() converted: " + str(res1))

res2 = typeCast2(listInput)
print("Using type() converted: " + str(res2))

输出

Input list is: ['1', '2', ('3', ['4', '5']), ['6', '7']]
Using isinstance() converted: [1, 2, (3, [4, 5]), [6, 7]]
Using type() converted: [1, 2, (3, [4, 5]), [6, 7]]

在这段代码中,我们看到了与isinstance()函数相似的实现,通过迭代每个元素检查多个数据类型。如果匹配成功,重新调用该函数并传递数据,否则将元素转换为整数。

另外,还使用了type()而不是isinstance()的第二种方法,输出结果相同。在Python中,isinstance()用于检查对象是否是特定数据类型,否则返回false;而type()通常在调试中很有用。当传递单个参数时,它返回对象的类型。

两者的时间和空间复杂度相同,因此使用方便。

方法#3:实现map和lambda

Python中的map()函数允许我们将指定的函数应用于列表或其他可迭代对象中的每个元素。它接受两个参数:可迭代对象和函数。让我们使用它与lambda函数一起,将混合列表中的每个元素转换为指定类型。



示例

def typeCast(inputEle):
    return list(map(lambda x: typeCast(x) if isinstance(x, (list, tuple)) else int(x), inputEle))

listInput = ['1', '2', ('3', ['4', '5']), ['6', '7']]
print("Input list is: " + str(listInput))

res = typeCast(listInput)
print("After conversion: " + str(res))

输出结果

Input list is: ['1', '2', ('3', ['4', '5']), ['6', '7']]
After conversion: [1, 2, (3, [4, 5]), [6, 7]]

因此,我们看到了map函数的高效性;它使得列表中的每个元素都通过lambda中定义的函数进行迭代。lambda函数使用isinstance()检查每个元素是列表还是元组,并对列表内的每个嵌套列表或元组递归调用typecast()函数。否则,它将其转换为整数。这样,每个元素都被迭代并转换为整数。

然后,map函数使用此lambda函数处理输入列表的每个元素并返回一个迭代器。我们使用list()函数将返回的迭代器转换回列表。

结论

在本文中,我们试图理解嵌套列表和混合列表以及如何对其中的数据进行强制转换。我们学习了类型转换或类型强制转换可以根据我们的要求更改数据类型,这在处理复杂数据结构时非常有用。我们讨论了三种在嵌套列表和混合列表中实施相同效果的有用方法。

理解类型转换是Python开发人员的关键技能,因为它帮助我们高效地操作数据并确保程序的正常运行。通过这个,我们还能留下实现相同效果的其他范围。尝试并探索吧。



Python 精选笔记
使用Pygame模块在Python中构建一个简单的游戏使用Python和ccxt库构建一个加密货币交易机器人使用Python和自然语言工具包(NLTK)构建聊天机器人使用Plan模块在Python中编写crontab文件使用Python和Requests库开发网络爬虫使用Python中的Whoosh库开发文本搜索引擎使用Python和scikit-learn开发机器学习模型使用Python和Plotly Dash创建基于Web的数据可视化仪表板使用Python控制树莓派GPIO引脚使用Python和Pandas库构建股票价格预测模型如何在Python中解析XML并计算特定节点属性的实例?如何在Python中解析本地HTML文件?如何按多列对PySpark DataFrame进行排序?如何在Pygame中移动游戏角色?如何在Python中同时打开两个文件?如何使用Python移动文件夹及其子文件夹的列表?如何使用Python将多个文件夹合并成一个文件夹?如何使用Python将多个Excel文件合并成一个单一文件?如何使用Python Pandas按照共同的键合并多个TSV文件?如何使用PIL将透明的PNG图片与另一张图片合并?Python中嵌套函数是如何工作的?Python中的全局变量和局部变量?在Python函数中如何使用全局变量?如何从Python对象中获取源代码?如何在Python中返回一个函数?如何在Python中安装matplotlib?Python - 分割包含散乱字符的字符串Python - 记录列表XORPython – 向记录的末尾添加数据Python - 键值大于K的记录在Python中垂直打印列表Python - 列表中字符串平均长度Python列表中的交替循环Python程序实现混淆词游戏Python-记录联合Python程序计算列表中元组的重复项Python程序:将字符串的字符转换为相反的大小写Python - 打印给定年份列表中的闰年数量Python - 打印所有子列表中的共同元素Python - 删除嵌套列表中的所有元素如何在Python列表中检查空格?在Python中引发异常到另一个异常Python字符串中的范围复制Python程序计算包含列表的列表中列表的数量修改给定Python列表中的重复值Python - 检查元素是否在指定范围内出现从Python的元组列表中删除所有字符串如何使用Pygame添加颜色呼吸效果?如何在Bokeh中添加颜色条如何在Bokeh中添加颜色选择器?使用Python程序显示带有星边框的数字半菱形图案Python使用ipaddress模块确定给定的IPv4地址是否为保留地址使用ipaddress模块的Python程序来确定给定的IP地址是公网还是私网Python程序通过平方和连接给定数字的奇数位数来创建一个OTPPython程序创建以零为中心的列表Python程序计算字符串中的字符数Python程序将米转换为码,反之亦然Python程序:统计文本文件中的元音、行数和字符数Python程序计算文本文件中的单词数量Python程序,用于计算文本文件中空格的数量将字典的值转换为字符串的Python程序Python程序将浮点数转换为指数Python程序将整数转换为指数Python程序将整数转换为罗马数字将整数列表转换为字符串列表的Python程序Python程序将XML转换为字典Python程序:通过重复键对应的值次数将字典转换为列表将Dict of list转换为CSV的Python程序使用正则表达式统计Python程序中大写字母、小写字母、特殊字符和数字值的个数Python元组的并集Python - 嵌套和混合列表中的类型转换Python - 将列表转换为单值列表的元组如何在Python中打印上标和下标?如何在Python中打印多个参数?如何在Plotly-Python中将图例定位在图表内部?如何使用Pandas绘制时序图表?如何使用SciPy在Python中绘制Ricker曲线?如何在Python列表中删除True值?如何使用Python将字典的值转换为绝对值?如何使用Python将字典转换为K个大小的字典?如何使用Python将浮点数舍入到2位小数?如何在Python中将Excel转换为CSV如何在Python中对元组进行索引和切片?如何在Python中判断一个对象是否有属性?在Python中创建实例对象如何使用Python获取城市的经纬度?如何在Python中获取整数输入?如何交换给定 NumPy 数组的列?如何使用NumPy抑制对小数的科学计数法使用?如何使用Python将XML数据存储到MySQL数据库中?如何在Pandas DataFrame中减去两列?如何在Pandas DataFrame中标准化数据?如何堆叠多个Pandas DataFrames?如何使用scikit-learn的train_test_split()函数拆分数据集如何在Python中分割数据以进行训练和测试,而不使用Sklearn在Python set中找到最大值和最小值Python程序:找到长方体的体积、表面积和空间对角线如何在Python程序中获取字符串的K个可能切片如何使用Altair在Python中制作密度图?生成一次性密码(OTP)的Python程序Python程序:找出数组中可被给定数整除的元素的XOR寻找巨大最大公约数(Jumbo GCD)子数组的Python程序如何在OpenCV Python中查找图像轮廓的边界矩形?如何在Python脚本所在的目录中打开文件?如何在Anaconda中安装Python包?如何在OpenCV Python中旋转图像?如何给定完整路径导入Python模块?如何在Python中从另一个函数调用变量?使用Python的Matplotlib在X轴上绘制日期如何在Python中不使用math模块进行平方根运算?如何在Python Tkinter中给Frame添加边框?如何从Python函数返回一个字典?Python程序获取元组中的第一个和最后一个元素如何求一个Python字典的值的总和?Python Pandas - 查找列的最大值并返回其对应的行值机器人流程自动化 - 简介机器学习中的逻辑回归损失函数如何从Python日期中减去一天?将物联网和机器学习相结合,使我们的未来更智能机器学习中的Boosting | Boosting和AdaBoost如何在Python中将时间戳字符串转换为datetime对象?如何在Python中将变量名转换为字符串?什么是Python中的.pyc文件?Python - 检查列表中的所有元素是否相同如何在Python Plotly中设置Y轴的范围?如何将Python日期转换为Unix时间戳?Python中的Turtle绘图编程如何在Python中的给定位置插入一个对象到列表中?如何在Python中进行日期验证?如何使用Python将两个图并排显示?在Python中的方法和函数之间的区别Python中的PYTHONPATH环境变量是什么?如何对Python日期字符串列表进行排序?在Python的Pandas中向现有的DataFrame中添加新列如何将Python元组转换为字典?Python - 使用Pandas读取没有标题的csv文件?如何使用OpenCV Python在图像中检测矩形和正方形?如何使用OpenCV在Python中改变图像的对比度和亮度?如何在Python中将日期时间转换为UTC时间戳?如何列出Python模块中的所有函数?Python程序查找字符串中的所有重复字符