phaggi
@phaggi
лужу, паяю, ЭВМы починяю

В чём разница между list() и []?

До сих пор я думал, что это должны быть эквивалентные записи.
print(list(range(5)))
print([range(5)])

Но нет. Где-то под капотом оно сильно разное.
[0, 1, 2, 3, 4]
[range(0, 5)]

В чем разница?
  • Вопрос задан
  • 312 просмотров
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
[] - это литерал для list()
list() - это конструктор списка.

В вашем случае разница в контексте. Выражение [range(5)] означает "список содержащий один генератор", а list(range(5)) означает "привести генератор к списку". Во втором случае происходит вычисление генератора в пять целых чисел и конструирование списка из них.
Ответ написан
@bacon
1. это функция, которая принимает в качестве параметров любой итератор и "итерирует" его в список.
2. это список, где первый элемент, результат функции range
Ответ написан
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Там всё просто.
Считайте, что list - это функция, которая принимает перечисляемый объект и возвращает список с извлеченными из этого объекта элементами.
[], [1,2,3] - это "синтаксический сахар" для удобной записи готовых списков в коде. Первый из этих двух примеров пустой, а второй содержит три элемента. Эта запись подразумевает, что элементами будут выражения, записанные в квадратных скобках через запятую.

Так что list() и [] действительно вернут одинаковый результат, но если речь не о пустых списках, то функция извлечет элементы из своего аргумента, а [1,2,3] примет в качестве элементов то, что внутри через запяту.

Прочитайте лучше систематически в книжке того же Лутца. Иначе вы своими догадками ни язык нормально не освоите, ни время не сэкономите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
в том что range это итератор, а лист это список. Итератор возвращает значение когда его спросят, а список это хранилище всех значений. Функция лист - опрашивает из итератора все значения которые он может вернуть.

разница в том что либо вы помните что у вас (начало,конец,шаг,текущее положение) или вы помните (10,20,30,40,50,60,...100500) - в случае списка ему придется занять память всеми значениями, а в случае итератора лишь хранить параметры для извлечения нового значения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
iCode Москва
от 90 000 до 200 000 ₽
Marilyn Москва
от 100 000 до 130 000 ₽
SwapZilla.co Москва
от 200 000 ₽