Подтвердить что ты не робот

Могу ли я безопасно смешивать типы в списке 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 поддерживает его, я опасаюсь смешивать типы, подобные этому в списке. Поскольку список смешанных типов данных не будет использоваться для какой-либо обработки, кроме как присвоения переменной сам по себе (переменные, которые он присваивает, но не сам список), я предполагаю, что это нормально, но я хочу убедиться, что это не является тайно проблематичным кодом.

4b9b3361

Ответ 1

Нет проблем, вы можете хранить любой тип внутри list, в отличие от "старых", когда на других языках были массивы, хотел только один тип данных, хранящихся в них.

Так как списки могут также хранить другой список, а другие составные структуры данных, а также другие ссылки на объекты, обработка или итерация через список может стать немного более сложной из-за возможных нескольких слоев, чем просто пройти через массив в простой одноуровневая итерация. Это также связано с мелким и глубоким копированием.

Если код, обрабатывающий списки, знает об этом, я не могу думать о каких-либо проблемах из-за этой способности хранить разные вещи в списке.

Ответ 2

Язык отлично подходит для вас, когда вы смешиваете типы в списке, но вы должны знать, что культура Python может на него нахмуриться. Кортежи обычно используются, когда у вас есть известная коллекция смешанных типов, а разные индексы имеют разную семантику. Списки обычно используются там, где у вас есть равномерная последовательность разной длины.

Таким образом, ваши данные будут более условно представлены как:

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

Чтобы сделать это более кратким: кортежи используются как C-структуры, такие как C-массивы.

Ответ 3

Нет никаких неотъемлемых проблем при наличии нескольких типов данных в списке. Проблемы могут возникнуть, если вы попытаетесь использовать этот список для чего-то, что ожидает, что он будет одного типа. В вашем примере, если это все, что вы делаете с этим, нет никакого способа, чтобы это стало проблемой. Однако вы можете рассмотреть использование кортежа вместо списка. По соглашению, кортежи используются, когда состав последовательности фиксирован; списки используются, когда вы можете добавить или удалить из последовательности.