Могу ли я безопасно смешивать типы в списке 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 поддерживает его, я опасаюсь смешивать типы, подобные этому в списке. Поскольку список смешанных типов данных не будет использоваться для какой-либо обработки, кроме как присвоения переменной сам по себе (переменные, которые он присваивает, но не сам список), я предполагаю, что это нормально, но я хочу убедиться, что это не является тайно проблематичным кодом.
Ответы
Ответ 1
Нет проблем, вы можете хранить любой тип внутри list, в отличие от "старых", когда на других языках были массивы, хотел только один тип данных, хранящихся в них.
Так как списки могут также хранить другой список, а другие составные структуры данных, а также другие ссылки на объекты, обработка или итерация через список может стать немного более сложной из-за возможных нескольких слоев, чем просто пройти через массив в простой одноуровневая итерация. Это также связано с мелким и глубоким копированием.
Если код, обрабатывающий списки, знает об этом, я не могу думать о каких-либо проблемах из-за этой способности хранить разные вещи в списке.
Ответ 2
Язык отлично подходит для вас, когда вы смешиваете типы в списке, но вы должны знать, что культура Python может на него нахмуриться. Кортежи обычно используются, когда у вас есть известная коллекция смешанных типов, а разные индексы имеют разную семантику. Списки обычно используются там, где у вас есть равномерная последовательность разной длины.
Таким образом, ваши данные будут более условно представлены как:
data = [
("name1", "long name1", 1, 2, 3),
("name2", "long name2", 5, 6, 7),
...
]
Чтобы сделать это более кратким: кортежи используются как C-структуры, такие как C-массивы.
Ответ 3
Нет никаких неотъемлемых проблем при наличии нескольких типов данных в списке. Проблемы могут возникнуть, если вы попытаетесь использовать этот список для чего-то, что ожидает, что он будет одного типа. В вашем примере, если это все, что вы делаете с этим, нет никакого способа, чтобы это стало проблемой. Однако вы можете рассмотреть использование кортежа вместо списка. По соглашению, кортежи используются, когда состав последовательности фиксирован; списки используются, когда вы можете добавить или удалить из последовательности.