Статьи

Списки

  1. 8,1 Список - это последовательность
  2. 8,4 Список операций
  3. 8,11 Объекты и ценности
  4. 8,14 отладка
  5. 8,15 глоссарий

8,1 Список - это последовательность

Как и строка, список представляет собой последовательность значений. В строке значения являются символами; в списке они могут быть любого типа. Значения в списке называются элементами или иногда элементами .

Есть несколько способов создать новый список; самое простое - заключить элементы в квадратные скобки ([и]): [10, 20, 30, 40] ['crunchy frog', 'ram bladder', 'lark vomit']. Первый пример - список из четырех целых чисел. , Второй список трех строк. Элементы списка не обязательно должны быть одного типа. Следующий список содержит строку, число с плавающей запятой, целое число и (lo!) Другой список: ['spam', 2.0, 5, [10, 20]] Список в другом списке является вложенным .

Список, который не содержит элементов, называется пустым списком; Вы можете создать один с пустыми скобками, [].

Как и следовало ожидать, вы можете назначить списочные значения переменным: >>> cheeses = ['Cheddar', 'Edam', 'Gouda'] >>> numbers = [17, 123] >>> empty = [] >> > печатать сыры, цифры, пустые [«Чеддер», «Эдам», «Гауда»] [17, 123] []

8,2 Списки изменчивы

Синтаксис для доступа к элементам списка такой же, как для доступа к символам строки --- оператора скобок. Выражение в скобках указывает индекс. Помните, что индексы начинаются с 0: >>> print cheeses [0] Cheddar В отличие от строк, списки изменчивы, потому что вы можете изменить порядок элементов в списке или переназначить элемент в списке. Когда оператор скобки появляется в левой части назначения, он идентифицирует элемент списка, который будет назначен.
>>> numbers = [17, 123] >>> numbers [1] = 5 >>> печатать числа [17, 5] Элемент из чисел, состоящий из одного элемента eth, который раньше был 123, теперь равен 5.

Вы можете думать о списке как о связи между индексами и элементами. Это отношение называется отображением ; каждый индекс "сопоставляется" с одним из элементов.

Индексы списка работают так же, как строковые индексы:
  • Любое целочисленное выражение может быть использовано в качестве индекса.
  • Если вы попытаетесь прочитать или записать элемент, который не существует, вы получите IndexError.

  • Если индекс имеет отрицательное значение, он считается в обратном направлении от конца списка.
Оператор in также работает со списками. >>> cheeses = ['Cheddar', 'Edam', 'Gouda'] >>> 'Edam' в сырах True >>> 'Brie' в сырах False

8,3 Обход списка

Самым распространенным способом обхода элементов списка является цикл for. Синтаксис такой же, как и для строк: для сыра в сыре: print cheese Это хорошо работает, если вам нужно только прочитать элементы списка. Но если вы хотите написать или обновить элементы, вам нужны индексы. Распространенный способ сделать это - объединить диапазон функций и len:
для i в диапазоне (len (числа)): числа [i] = числа [i] * 2 Этот цикл пересекает список и обновляет каждый элемент. len возвращает количество элементов в списке. range возвращает список индексов от 0 до n -1, где n - длина списка. Каждый раз через цикл я получаю индекс следующего элемента. Оператор присваивания в теле использует i для чтения старого значения элемента и для присвоения нового значения.

Цикл for над пустым списком никогда не выполняет тело: для x в пустом: print «Этого никогда не происходит». Хотя список может содержать другой список, вложенный список по-прежнему считается одним элементом. Длина этого списка составляет четыре:
['spam', 1, ['Brie', 'Roquefort', 'Pol le Veq'], [1, 2, 3]]

8,4 Список операций

Оператор + объединяет списки:
>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = a + b >>> print c [1, 2, 3, 4, 5, 6] Аналогично, оператор * повторяет список заданное количество раз:
>>> [0] * 4 [0, 0, 0, 0] >>> [1, 2, 3] * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3] Первый Пример повторяется [0] четыре раза. Второй пример повторяет список [1, 2, 3] три раза.

8,5 Список ломтиков

Оператор среза также работает со списками: >>> t = ['a', 'b', 'c', 'd', 'e', ​​'f'] >>> t [1: 3] ['b ',' c '] >>> t [: 4] [' a ',' b ',' c ',' d '] >>> t [3:] [' d ',' e ',' f '] Если вы пропустите первый индекс, срез начнется с начала. Если вы опустите второй, срез идет до конца. Так что, если вы опустите оба, срез будет копией всего списка.
>>> t [:] ['a', 'b', 'c', 'd', 'e', ​​'f'] Поскольку списки изменчивы, часто полезно сделать копию перед выполнением операций, которые сворачиваются , веретено или изувеченные списки.

Оператор среза в левой части назначения может обновлять несколько элементов:
>>> t = ['a', 'b', 'c', 'd', 'e', ​​'f'] >>> t [1: 3] = ['x', 'y']> >> print t ['a', 'x', 'y', 'd', 'e', ​​'f']

8,6 Список методов

Python предоставляет методы, которые работают со списками. Например, append добавляет новый элемент в конец списка:
>>> t = ['a', 'b', 'c'] >>> t.append ('d') >>> print t ['a', 'b', 'c', 'd' ] extension принимает список в качестве аргумента и добавляет все элементы:
>>> t1 = ['a', 'b', 'c'] >>> t2 = ['d', 'e'] >>> t1.extend (t2) >>> print t1 ['a' , 'b', 'c', 'd', 'e'] В этом примере t2 остается неизменным.
sort упорядочивает элементы списка по возрастанию:
>>> t = ['d', 'c', 'e', ​​'b', 'a'] >>> t.sort () >>> print t ['a', 'b', 'c ',' d ',' e '] Большинство методов списка недействительны; они изменяют список и возвращают None. Если вы случайно напишите t = t.sort (), вы будете разочарованы результатом.

8,7 Удаление элементов

Есть несколько способов удалить элементы из списка. Если вы знаете индекс нужного вам элемента, вы можете использовать pop:
>>> t = ['a', 'b', 'c'] >>> x = t.pop (1) >>> print t ['a', 'c'] >>> print xb pop модифицирует список и возвращает элемент, который был удален. Если вы не предоставите индекс, он удалит и вернет последний элемент.
Если вам не нужно удаленное значение, вы можете использовать оператор del:
>>> t = ['a', 'b', 'c'] >>> del t [1] >>> print t ['a', 'c'] Если вы знаете элемент, который хотите удалить ( но не индекс), вы можете использовать удалить:
>>> t = ['a', 'b', 'c'] >>> t.remove ('b') >>> print t ['a', 'c'] Возвращаемое значение от remove - None ,

Чтобы удалить более одного элемента, вы можете использовать del с индексом слайса: >>> t = ['a', 'b', 'c', 'd', 'e', ​​'f'] >>> del t [1: 5] >>> print t ['a', 'f'] Как обычно, срез выделяет все элементы, вплоть до второго индекса, но не включая его.

8,8 Списки и функции

Существует несколько встроенных функций, которые можно использовать в списках, которые позволяют быстро просматривать список без написания собственных циклов: >>> nums = [3, 41, 12, 9, 74, 15] >> > print len ​​(nums) 6 >>> print max (nums) 74 >>> print min (nums) 3 >>> print sum (nums) 154 >>> print sum (nums) / len (nums) 25 Сумма () функция работает только тогда, когда элементы списка являются числами. Другие функции (max (), len () и т. Д.) Работают со списками строк и других типов, которые могут быть сопоставимы.
Мы могли бы переписать более раннюю программу, которая вычисляла среднее значение списка чисел, введенных пользователем, используя список.
Во-первых, программа для вычисления среднего значения без списка: total = 0 count = 0 while (True): inp = raw_input ('Введите число:'), если inp == 'done': значение разрыва = float (inp) total = итог + значение счетчика = счетчик + 1 средний = итог / счетчик печати 'Среднее:', среднее В этой программе у нас есть переменные подсчета и суммы, чтобы сохранить число и промежуточный итог чисел пользователя, поскольку мы неоднократно запрашиваем у пользователя число.
Мы могли бы просто запомнить каждое число, когда пользователь ввел его, и использовать встроенные функции для вычисления суммы и подсчета в конце. numlist = list () while (True): inp = raw_input ('Введите число:'), если inp == 'done': значение разрыва = float (inp) numlist.append (значение) среднее = сумма (numlist) / len (numlist) напечатать «Среднее:», среднее Мы создаем пустой список до начала цикла, а затем каждый раз, когда у нас есть число, мы добавляем его в список. В конце программы мы просто вычисляем сумму чисел в списке и делим ее на количество чисел в списке, чтобы получить среднее значение.

8,9 Списки и строки

Строка - это последовательность символов, а список - это последовательность значений, но список символов не совпадает со строкой. Чтобы преобразовать строку в список символов, вы можете использовать list:
>>> s = 'spam' >>> t = list (s) >>> print t ['s', 'p', 'a', 'm'] Поскольку список - это имя встроенной функции , вы должны избегать использования его в качестве имени переменной. Я также избегаю l, потому что это выглядит как 1. Поэтому я использую t.
Функция list разбивает строку на отдельные буквы. Если вы хотите разбить строку на слова, вы можете использовать метод split:
>>> s = 'pining для фьордов' >>> t = s.split () >>> print t ['pining', 'for', 'the', 'fjords'] >>> print t [2 ] После того, как вы использовали разделение, чтобы разбить строку на список токенов, вы можете использовать оператор индекса (квадратную скобку), чтобы посмотреть конкретное слово в списке.
Вы можете вызывать split с помощью необязательного аргумента, называемого разделителем, который указывает, какие символы использовать в качестве границ слов. В следующем примере в качестве разделителя используется дефис:
>>> s = 'spam-spam-spam' >>> delimiter = '-' >>> s.split (delimiter) ['spam', 'spam', 'spam'] соединение является обратным разбиению. Он принимает список строк и объединяет элементы. join - это строковый метод, поэтому вы должны вызвать его в качестве разделителя и передать список в качестве параметра:
>>> t = ['pining', 'for', 'the', 'fjords'] >>> delimiter = '' >>> delimiter.join (t) 'pining for the fjords' В этом случае разделителем является символ пробела, поэтому join ставит пробел между словами. Чтобы объединить строки без пробелов, вы можете использовать пустую строку "" в качестве разделителя.

8,10 Разбор строк

Обычно, когда мы читаем файл, мы хотим что-то сделать со строками, а не просто напечатать всю строку. Часто мы хотим найти «интересные линии», а затем проанализировать строку, чтобы найти какую-то интересную часть линии. Что, если мы хотим распечатать день недели из тех строк, которые начинаются с «От». От [электронная почта защищена] Сб 5 Янв 09:14:16 2008 Метод разделения очень эффективен, когда сталкивается с такой проблемой. Мы можем написать небольшую программу, которая ищет строки, где строка начинается с «From», затем разбивает эти строки и затем печатает третье слово в строке: fhand = open ('mbox-short.txt') для строки в fhand : line = line.rstrip () если не line.startswith ('From'): continue words = line.split () print words [2] Мы также используем сокращенную форму оператора if, в котором мы помещаем продолжение в то же самое линия как будто. Эта сокращенная форма функций if такая же, как если бы оператор continue был на следующей строке и с отступом.
Программа производит следующий вывод: Сб Пт Пт Пт ... Позже мы изучим все более изощренные методы выделения линий для работы и того, как мы разделяем эти строки, чтобы найти точную информацию, которую мы ищем.

8,11 Объекты и ценности

Если мы выполним эти операторы присваивания: a = 'banana' b = 'banana' Мы знаем, что a и b оба ссылаются на строку, но мы не знаем, ссылаются ли они на одну и ту же строку. Есть два возможных состояния:


В одном случае a и b относятся к двум разным объектам, имеющим одинаковое значение. Во втором случае они ссылаются на один и тот же объект.

Чтобы проверить, ссылаются ли две переменные на один и тот же объект, вы можете использовать оператор is. >>> a = 'banana' >>> b = 'banana' >>> a is b True В этом примере Python создал только один строковый объект, и a и b ссылаются на него.
Но когда вы создаете два списка, вы получаете два объекта: >>> a = [1, 2, 3] >>> b = [1, 2, 3] >>> a is b False В этом случае мы бы сказали, что два списка эквивалентны , потому что они имеют одинаковые элементы, но не идентичны , потому что они не являются одним и тем же объектом. Если два объекта идентичны, они также эквивалентны, но если они эквивалентны, они не обязательно идентичны.

До сих пор мы использовали взаимозаменяемо «объект» и «значение», но точнее сказать, что у объекта есть значение. Если вы выполните a = [1,2,3], a ссылается на объект списка, значением которого является определенная последовательность элементов. Если другой список имеет те же элементы, мы бы сказали, что он имеет то же значение.

8,12 Aliasing

Если a ссылается на объект, и вы назначаете b = a, тогда обе переменные ссылаются на один и тот же объект: >>> a = [1, 2, 3] >>> b = a >>> b является True Ассоциация переменная с объектом называется ссылкой . В этом примере есть две ссылки на один и тот же объект.

Объект с более чем одной ссылкой имеет более одного имени, поэтому мы говорим, что объект является псевдонимом .

Если объект с псевдонимом является изменяемым, изменения, сделанные с одним псевдонимом, влияют на другой: >>> b [0] = 17 >>> print a [17, 2, 3] Хотя это поведение может быть полезным, оно подвержено ошибкам. Как правило, безопаснее избегать наложения имен при работе с изменяемыми объектами.

Для неизменяемых объектов, таких как строки, создание псевдонимов не является большой проблемой. В этом примере: a = 'banana' b = 'banana' Почти никогда не имеет значения, ссылаются ли a и b на одну и ту же строку или нет.

8,13 Список аргументов

Когда вы передаете список функции, функция получает ссылку на список. Если функция изменяет параметр списка, вызывающая сторона видит изменение. Например, delete_head удаляет первый элемент из списка: def delete_head (t): del t [0] Вот как это используется: >>> letters = ['a', 'b', 'c'] >>> delete_head (letters) >>> print letters ['b', 'c'] Параметр t и переменные буквы являются псевдонимами для одного и того же объекта.
Важно различать операции, которые изменяют списки, и операции, которые создают новые списки. Например, метод append изменяет список, но оператор + создает новый список:
>>> t1 = [1, 2] >>> t2 = t1.append (3) >>> print t1 [1, 2, 3] >>> print t2 Нет >>> t3 = t1 + [3]> >> print t3 [1, 2, 3] >>> t2 - t3 False Это различие важно, когда вы пишете функции, которые должны изменять списки. Например, эта функция не удаляет заголовок списка: def bad_delete_head (t): t = t [1:] # НЕПРАВИЛЬНО! Оператор среза создает новый список, и присваивание заставляет его ссылаться на него, но ничего из этого не влияет на список, который был передан в качестве аргумента.

Альтернативой является написание функции, которая создает и возвращает новый список. Например, tail возвращает все, кроме первого элемента списка: def tail (t): return t [1:] Эта функция оставляет исходный список без изменений. Вот как это используется: >>> letters = ['a', 'b', 'c'] >>> rest = tail (letters) >>> print rest ['b', 'c']

Упражнение 1
Напишите функцию с именем chop, которая берет список и модифицирует его, удаляя первый и последний элементы, и возвращает None.
Затем напишите функцию с именем middle, которая берет список и возвращает новый список, содержащий все элементы, кроме первого и последнего.


8,14 отладка

Неосторожное использование списков (и других изменяемых объектов) может привести к длительным часам отладки. Вот некоторые распространенные ошибки и способы их избежать:
  1. Не забывайте, что большинство методов списка изменяют аргумент и возвращают None. Это противоположно строковым методам, которые возвращают новую строку и оставляют оригинал в покое.
    Если вы привыкли писать строковый код следующим образом: word = word.strip () Соблазнительно написать код списка следующим образом: t = t.sort () # WRONG! Поскольку sort возвращает None, следующая операция, которую вы выполняете с помощью t, скорее всего, не будет выполнена.
    Прежде чем использовать методы и операторы списка, вы должны внимательно прочитать документацию, а затем протестировать их в интерактивном режиме. Методы и операторы, которые разделяют списки с другими последовательностями (например, строками), описаны в docs.python.org/lib/typesseq.html. Методы и операторы, которые применяются только к изменяемым последовательностям, описаны в docs.python.org/lib/typesseq-mutable.html.
  2. Выберите идиому и придерживайтесь ее.
    Часть проблемы со списками заключается в том, что существует слишком много способов сделать что-то. Например, чтобы удалить элемент из списка, вы можете использовать pop, remove, del или даже присваивание фрагмента.
    Чтобы добавить элемент, вы можете использовать метод добавления или оператор +. Но не забывайте, что это правильно: t.append (x) t = t + [x] И это неправильно: t.append ([x]) # НЕПРАВИЛЬНО! t = t.append (x) # НЕПРАВИЛЬНО! t + [x] # НЕПРАВИЛЬНО! t = t + x # НЕПРАВИЛЬНО! Попробуйте каждый из этих примеров в интерактивном режиме, чтобы убедиться, что вы понимаете, что они делают. Обратите внимание, что только последний вызывает ошибку во время выполнения; остальные три законны, но они поступают неправильно.
  3. Сделайте копии, чтобы избежать наложения.

    Если вы хотите использовать метод вроде sort, который изменяет аргумент, но вам также необходимо сохранить исходный список, вы можете сделать копию. orig = t [:] t.sort () В этом примере вы также можете использовать встроенную функцию sorted, которая возвращает новый отсортированный список и оставляет оригинал в покое. Но в этом случае вы должны избегать использования сортировки в качестве имени переменной!
  4. Списки, сплит и файлы
    Когда мы читаем и анализируем файлы, есть много возможностей встретиться с вводом, который может привести к сбою нашей программы, поэтому рекомендуется вернуться к шаблону Guardian, когда речь идет о написании программ, которые читают файл и ищут «иголку в стоге сена». ,
    Давайте вернемся к нашей программе, которая ищет день недели в строках нашего файла: [электронная почта защищена] Сб 5 Янв 09:14:16 2008 Так как мы разбиваем эту строку на слова, мы могли бы отказаться от использования стартов с и просто посмотреть на первое слово строки, чтобы определить, заинтересованы ли мы в этой строке вообще. Мы можем использовать continue, чтобы пропустить строки, которые не имеют «From» в качестве первого слова, следующим образом: fhand = open ('mbox-short.txt') для строки в fhand: words = line.split () if words [0 ]! = 'From': продолжить печать слов [2] Это выглядит намного проще, и нам даже не нужно делать полоску для удаления новой строки в конце файла. Но так ли это лучше? python search8.py Sat Traceback (последний вызов был последним): файл "search8.py", строка 5, в <module> if words [0]! = 'From': continue IndexError: список индексов выходит за пределы диапазона Это работает и мы видим день с первой строки (сб), но затем программа завершается с ошибкой отслеживания. Что пошло не так? Какие испорченные данные привели к сбою нашей элегантной, умной и очень Pythonic программы?
    Вы могли бы долго смотреть на это и ломать голову над ним или просить кого-то о помощи, но более быстрый и умный подход состоит в том, чтобы добавить заявление для печати. Лучшее место для добавления оператора печати - прямо перед строкой, в которой произошел сбой программы, и распечатать данные, которые, по-видимому, являются причиной сбоя.
    Теперь этот подход может генерировать много строк вывода, но, по крайней мере, вы сразу поймете, что проблема под рукой. Таким образом, мы добавляем печать переменных слов перед пятой строкой. Мы даже добавляем префикс «Debug:» в строку, чтобы мы могли сохранить наш обычный вывод отдельно от нашего вывода отладки. для строки в fhand: words = line.split () print 'Debug:', words if words [0]! = 'From': продолжить печатать слова [2] Когда мы запускаем программу, большая часть вывода прокручивается с экрана но в конце мы видим результаты отладки и трассировку, поэтому мы знаем, что произошло непосредственно перед трассировкой. Отладка: ['X-DSPAM-Confidence:', '0.8475'] Отладка: ['X-DSPAM-Probability:', '0.0000'] Отладка: [] Traceback (последний вызов был последним): файл "search9.py" , строка 6, в <module> if words [0]! = 'From': continue IndexError: список индексов вне диапазона Каждая строка отладки печатает список слов, который мы получаем, когда разбиваем строку на слова. При сбое программы список слов пуст []. Если мы откроем файл в текстовом редакторе и посмотрим на файл, в этот момент он будет выглядеть следующим образом: X-DSPAM-Result: Innocent X-DSPAM-Обработано: сб 5 января 09:14:16 2008 X-DSPAM-Confidence : 0.8475 X-DSPAM-Вероятность: 0,0000 Подробности: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772 Ошибка возникает, когда наша программа встречает пустую строку! Конечно, в пустой строке есть «ноль слов». Почему мы не подумали об этом, когда писали код. Когда код ищет первое слово (word [0]), чтобы проверить, соответствует ли оно «From», мы получаем ошибку «index out of range».
    Это, конечно, идеальное место для добавления некоторого кода- хранителя, чтобы избежать проверки первого слова, если первого слова там нет. Есть много способов защитить этот код, мы выберем проверить количество слов, которые у нас есть, прежде чем мы посмотрим на первое слово: fhand = open ('mbox-short.txt') count = 0 для строки в fhand: words = line.split () # print 'Debug:', words if len (words) == 0: продолжить, если words [0]! = 'From': продолжить печать слов [2] Сначала мы закомментировали оператор отладочной печати вместо удалите его в случае, если наша модификация завершится неудачно, и нам нужно снова выполнить отладку Затем мы добавили оператор-хранитель, который проверяет, есть ли у нас ноль слов, и если это так, мы используем продолжить, чтобы перейти к следующей строке в файле.
    Мы можем думать о двух утверждениях продолжения, которые помогают нам уточнить набор строк, которые «интересны» для нас и которые мы хотим еще немного обработать. Строка, в которой нет слов, «неинтересна» для нас, поэтому мы переходим к следующей строке. Строка, в которой в качестве первого слова не указано «От», нам неинтересна, поэтому мы пропускаем ее.
    Измененная программа успешно работает, поэтому, возможно, она верна. Наше заявление опекуна действительно гарантирует, что слова [0] никогда не потерпят неудачу, но, возможно, этого недостаточно. Когда мы программируем, мы всегда должны думать: «Что может пойти не так?».

    Упражнение 2 Выясните, какая строка вышеприведенной программы все еще не защищена должным образом. Посмотрите, можете ли вы создать текстовый файл, который приведет к сбою программы, а затем изменить программу так, чтобы строка была правильно защищена, и протестируйте ее, чтобы убедиться, что она обрабатывает ваш новый текстовый файл.


    Упражнение 3 Перепишите код защитника в приведенном выше примере без двух операторов if. Вместо этого используйте составное логическое выражение, используя логический оператор и с одним оператором if.

8,15 глоссарий

алиасинг: обстоятельство, когда две или более переменных ссылаются на один и тот же объект.
разделитель: символ или строка, используемые, чтобы указать, где строка должна быть разделена.
элемент: одно из значений в списке (или другой последовательности), также называемых элементами.
эквивалент: имеющий одинаковое значение.
index: целочисленное значение, которое указывает элемент в списке.
идентичный: Быть тем же объектом (что подразумевает эквивалентность).
список: последовательность значений.
обход списка: последовательный доступ к каждому элементу в списке.
Вложенный список: список, который является элементом другого списка.
объект: нечто, на что может ссылаться переменная. Объект имеет тип и значение.
ссылка: связь между переменной и ее значением.

8,16 упражнения


Упражнение 4 Загрузите копию файла с www.py4inf.com/code/romeo.txt
Напишите программу, чтобы открыть файл romeo.txt и читать его построчно. Для каждой строки разбейте строку на список слов, используя функцию разделения.
Для каждого слова проверьте, есть ли слово в списке. Если слова нет в списке, добавьте его в список.
По завершении программы отсортируйте и распечатайте полученные слова в алфавитном порядке. Введите файл: romeo.txt ['Возникнуть', 'Но', 'Это', 'Джульетта', 'Кто', 'уже', 'и', 'перерывы', 'восток', 'завистник', 'ярмарка' , «горе», «это», «убить», «свет», «луна», «бледный», «больной», «мягкий», «солнце», «через», «что», « окно ',' с ',' там ']
Упражнение 5 Напишите программу для чтения данных почтового ящика, и когда вы найдете строку, начинающуюся с «От», вы разделите строку на слова, используя функцию разделения. Нас интересует, кто отправил сообщение, являющееся вторым словом в строке «От».
От [электронная почта защищена] Сб 5 янв. 09:14:16 2008
Вы проанализируете строку From и распечатаете второе слово для каждой строки From, а затем посчитаете количество строк From (не From :) и распечатаете счет в конце.
Это хороший пример вывода с удалением нескольких строк: python fromcount.py Введите имя файла: mbox-short.txt [электронная почта защищена] [электронная почта защищена] [электронная почта защищена] [... некоторые данные удалены ...] [электронная почта защищена] [электронная почта защищена] [электронная почта защищена] [электронная почта защищена] В файле было 27 строк с первым словом From
Упражнение 6 Перепишите программу, которая запрашивает у пользователя список чисел и печатает максимальное и минимальное число в конце, когда пользователь вводит «готово». Напишите программу для хранения чисел, которые пользователь вводит в список, и используйте функции max () и min () для вычисления максимального и минимального чисел после завершения цикла. Введите число: 6 Введите число: 2 Введите число: 9 Введите число: 3 Введите число: 5 Введите число: выполнено Максимум: 9,0 Минимум: 2.0
2011.11.19
Карта