python列表可以混合类型,在python列表中混合类型是否安全?

这篇博客讨论了在Python中使用混合类型列表的可行性,指出虽然Python允许这样做,但在处理时需要注意列表中可能存在的多种类型。文章通过示例代码展示了如何随机选择列表中的元素作为函数参数,并提醒读者在处理此类列表时需要确保代码能正确处理不同类型的元素。此外,建议在适合固定结构的情况下使用元组,以提高代码的可读性和约定俗成的做法。
摘要由CSDN通过智能技术生成

在一个python列表中混合不同类型有没有不可预见的问题?例如:

import random

data = [["name1","long name1", 1, 2, 3],

["name2","long name2", 5, 6, 7]]

name, long_name, int1, int2, int3 = random.choice(data)

我使用这段代码随机地在一个函数中设置了几个相关的参数,但是即使Python支持它,我还是要小心在列表中混合类似的类型。由于混合数据类型的列表除了本身和内部的变量分配(它分配给will的变量,而不是列表本身)之外,不会用于任何处理,所以我认为这是可以的,但我想确保这不是秘密的有问题的代码。

从技术上讲,数组元素都是相同的类型-引用(对象)

@格尼布尔说得对。

不,没问题,你可以在列表中存储任何类型的数据,而不像在"过去",其他语言的数组只需要其中存储一种类型的数据。

由于列表还可以存储其他列表和其他复合数据结构以及其他对象引用,因此通过列表进行处理或迭代可能会由于可能存在多个层而变得比通过简单的单级迭代中的数组复杂一些。这也与浅拷贝和深拷贝有关。

如果处理列表的代码意识到了这一点,那么我想不出任何问题,因为它能够将不同的东西存储在列表中。

谢谢。我知道我可以存储任何数据类型,但我想确保没有任何问题显示出来,我可以很早就避免。

@Ricardoaltamirano唯一的问题是代码处理列表需要考虑到这一点,因为列表可以包含列表本身或其他数据结构。否则,我想不出有什么问题。

好吧,处理data列表的代码就在这里。这只不过是江户十一〔一〕号,据我所知,它应该处理得当。

@里卡多阿尔塔米拉诺同意,我也没看到问题:)

语言可以在列表中混合类型,但您应该知道,Python文化可能不喜欢它。当您有一个已知的混合类型集合,并且不同的索引具有不同的语义时,通常使用元组。列表通常用于具有相同长度序列的情况。

因此,您的数据通常表示为:

data = [

("name1","long name1", 1, 2, 3),

("name2","long name2", 5, 6, 7),

...

]

简而言之:元组的用法类似于C结构,列表类似于C数组。

如果元组很长或者在代码中使用了很多地方,那么您可能需要定义一个类,这样您就可以在对象的每个位置命名它。

在一个列表中有多个数据类型没有固有的问题。当然,如果您试图将该列表用于希望它是完全相同类型的内容,则可能会出现问题。在您的示例中,如果这就是您所做的全部工作,那么它就不可能成为问题。不过,您可以考虑使用元组而不是列表。按照惯例,当序列的组合是固定的时,使用元组;当您可以添加到序列或从序列中删除时,使用列表。

这就是我的想法,但是因为我将只在列表中的数据各自的变量中单独使用它们,所以我认为这不会造成伤害。

如果您只是使用它来存储不同的可能输出——它们遵循您的函数的name, long_name, int1, int2, int3契约——那么没问题。

如果其他不知道列表中类型及其顺序的代码正在使用此代码,那么我确实看到了一个问题。一个简单的例子:

>>> min(['-2', 1])

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值