在Python列表中混合类型安全吗?

2024-04-29 04:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在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支持它,我也很小心在列表中混合这样的类型。由于混合数据类型的列表除了本身的变量赋值(它赋值给的变量会,而不是列表本身)之外,不会用于任何处理,所以我认为这很好,但我想确保这不是秘密的有问题的代码。


Tags: 代码nameimport类型列表datarandomlong
3条回答

不,没问题,您可以在list中存储任何类型,这与“过去”不同,当时其他语言的数组只希望在其中存储一种类型的数据。

由于列表还可以存储其他列表和其他复合数据结构以及其他对象引用,因此由于可能存在多个层,处理或迭代列表可能会比在简单的单级迭代中遍历数组复杂一些。这也与shallow and deep copying有关。

如果处理列表的代码意识到了这一点,我就不会考虑由于在列表中存储不同内容的能力而导致的任何问题。

这种语言很适合在列表中混合类型,但是您应该知道Python文化可能不喜欢它。元组通常用于已知的混合类型集合以及不同索引具有不同语义的情况。列表通常用于具有不同长度的统一序列的情况。

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

data = [
    ("name1", "long name1", 1, 2, 3),
    ("name2", "long name2", 5, 6, 7),
    ...
]

更简洁地说:元组像C结构一样使用,列表像C数组一样使用。

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

相关问题 更多 >