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

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

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

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

В чем разница?
  • Вопрос задан
  • 394 просмотра
Решения вопроса 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) - в случае списка ему придется занять память всеми значениями, а в случае итератора лишь хранить параметры для извлечения нового значения.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
17 мая 2021, в 16:39
500 руб./за проект
17 мая 2021, в 16:38
1200 руб./в час
17 мая 2021, в 16:26
15000 руб./за проект