Любой способ очистить переменную, не устанавливая ее в глобальную [дубликат]

Backticks (`) используются для определения шаблонных литералов.

Особенности:

  • мы можем интерполировать любые выражения в шаблонных литералах.
  • Они могут быть многострочными.

Примечание: мы можем легко использовать одинарные кавычки (') и двойные кавычки (") внутри обратных шагов (`) .

Пример:

var nameStr = `I'm "Rohit" Jindal`;

Чтобы интерполировать переменные или выражение, мы можем использовать обозначение ${expression} для этого.

var name = 'Rohit Jindal';
var text = `My name is ${name}`;
console.log(text); // My name is Rohit Jindal

Multi-line Строки означают, что вам больше не нужно использовать \n для новых строк.

Пример:

const name = 'Rohit';
console.log(`Hello ${name}!
How are you?`);

Выход:

Hello Rohit!
How are you?
297
задан Peter Mortensen 13 March 2010 в 17:47
поделиться

7 ответов

Это фактически удаляет содержимое из списка, но не заменяет старую метку новым пустым списком:

del lst[:]

Вот пример:

lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)

Для полноты назначение среза имеет такой же эффект:

lst[:] = []

Его также можно использовать для сокращения части списка при одновременном замене части (но это не из

Обратите внимание, что выполнение lst = [] не пустет список, просто создает новый объект и связывает его с переменной lst, но старый список будет по-прежнему иметь одинаковый элементы и эффект будут очевидны, если у него были другие переменные привязки.

504
ответ дан Andrew Laino 19 August 2018 в 17:38
поделиться
  • 1
    Еще два вопроса: что такое "del" в точку? (Я вычитаю это del-etes вещи, но я действительно не знаю, что это такое) и 2nd: Как вы читаете (вслух) [:] – OscarRyz 9 September 2009 в 17:24
  • 2
    Для правильного объяснения del я хотел бы обратиться к документам: docs.python.org/reference/simple_stmts.html#the-del-statement – fortran 9 September 2009 в 17:28
  • 3
    Обычно я не читаю громкий код python xD, но если бы мне пришлось подумать, что я бы сказал, что «кусок от начала до конца списка l». – fortran 9 September 2009 в 17:29
  • 4
    Хороший каламбур в вашем комментарии, fortran ... не знаю, было ли это намеренно. «Как вы читаете вслух?» ... & quot; Для звука объяснение ... & quot ;. – Johannes Charra 6 May 2010 в 15:47
  • 5
    @jellybean совершенно непреднамеренно ^ _ ^ Английский не мой родной язык, поэтому я действительно не заметил контраста между двумя комментариями. – fortran 6 May 2010 в 16:00

Вы можете попробовать:

alist[:] = []

Это означает: объединение в списке [] (0 элементов) в месте [:] (все индексы от начала до конца)

[:] - это оператор среза. См. этот вопрос для получения дополнительной информации.

53
ответ дан Community 19 August 2018 в 17:38
поделиться
  • 1
    Почему не только alist = []? – mitenka 9 February 2017 в 19:31
  • 2
    @mitenka, которая не пустает список, перезаписывает переменную alist с другим списком, который оказывается пустым. Если кто-то еще ссылался на исходный список, то он остается как есть (т. Е. Содержит все, что было в нем для начала) – Adam Batkin 13 February 2017 в 04:56

получается, что с python 2.5.2 del l[:] немного медленнее, чем l[:] = [] на 1.1 мкс.

$ python -mtimeit "l=list(range(1000))" "b=l[:];del b[:]"
10000 loops, best of 3: 29.8 usec per loop
$ python -mtimeit "l=list(range(1000))" "b=l[:];b[:] = []"
10000 loops, best of 3: 28.7 usec per loop
$ python -V
Python 2.5.2
29
ответ дан Dan D. 19 August 2018 в 17:38
поделиться
  • 1
    Хороший момент, спустя столько времени, кстати – DrFalk3n 23 November 2011 в 21:56
  • 2
    В Python 2.7.2 на моей машине они примерно одинаковы. Оба они работают от 13,5-13,7 мксек за цикл. – leetNightshade 8 November 2012 в 00:23
  • 3
    Вы также должны измерить python3 -mtimeit & quot; l = list (range (1000)) & quot; & Quot; б = л [:] & Quot; для вычисления "b [:] = []" и "del b [:]". Сделайте это и lol ... – rockdaboot 5 February 2016 в 11:00
  • 4
    Я сделал тест с python 3.5, и я согласен с leetNightshade. .clear(), del b[:] и b[:]=[] все работают одинаково (b[:]=[] немного медленнее. – Conchylicultor 13 March 2017 в 02:13

Еще один простой код, который вы можете использовать (в зависимости от вашей ситуации):

index=len(list)-1

while index>=0:
    del list[index]
    index-=1

Вам нужно начинать индексировать по длине списка и идти назад против индекса на 0, вперед, потому что это будет закончите с индексом, равным длине списка, при этом он будет разрезан только наполовину.

Также убедитесь, что строка while имеет знак «больше или равно». Опуская это, вы оставите список с остатком [0].

-3
ответ дан Donald 19 August 2018 в 17:38
поделиться

Если у вас есть Python 3.3 или выше, вы можете использовать метод clear() list, который параллелен clear() из dict, set, deque и другие изменяемые типы контейнеров:

alist.clear()  # removes all items from alist (equivalent to del alist[:])

Как и на связанной странице, это также может быть достигнуто с помощью alist *= 0.

67
ответ дан Eugene Yarmash 19 August 2018 в 17:38
поделиться
  • 1
    Этот ответ должен быть наверху, что неправильно с stackoverflow! – BreakBadSP 3 August 2018 в 05:59
list = []

сбрасывает list в пустой список.

Обратите внимание, что вы вообще не должны хранить теневые зарезервированные имена функций, такие как list, который является конструктором для объекта списка - вы могли бы использовать, например, lst или list_, например.

-1
ответ дан Mark Rushakoff 19 August 2018 в 17:38
поделиться
  • 1
    Нет: это не изменит список, это просто присваивает пустой список переменной list. Если вы ожидали, что функция изменит переданный список (например), это не будет делать то, что вы хотите. – Adam Batkin 9 September 2009 в 17:12
  • 2
    На самом деле, нет. Возникает вопрос: «Как удалить список»? не "Как назначить над переменной, которая содержит список" – Adam Batkin 9 September 2009 в 17:17
  • 3
    вопрос не был двусмысленным, фрагмент op выходил из списка (вот он, изменяя его на месте) ... – fortran 9 September 2009 в 17:21
  • 4
    Кроме того, "список" не следует использовать в качестве имени переменной, потому что это тени "list & quot;" тип. Многие разработчики Python используют & quot; L & quot; как имя переменной списка, но я предпочитаю «lst». – steveha 10 September 2009 в 23:29
  • 5
    Иногда вы просто хотите, чтобы список опустел, и это так же хорошо, как и любой из предложенных методов. Вероятно, еще быстрее – smac89 21 May 2016 в 22:10
lst *= 0

имеет тот же эффект, что и

lst[:] = []

. Это немного проще и, возможно, легче запомнить. Кроме того, нечего сказать

Эффективность, похоже, примерно такая же

2
ответ дан Simon 19 August 2018 в 17:38
поделиться
  • 1
    Для полноты стоит упомянуть, что любое заданное целое число, которое меньше или равно 0, будет иметь такой же эффект. Это довольно аккуратный трюк, хотя, я немного грустен, что он не получил большого внимания. – Peter Varo 24 May 2018 в 09:54
Другие вопросы по тегам:

Похожие вопросы: