Python. Получение имени списка
@ВОРОН мне просто надо имя переменной, чтобы после её записать. Я пробовал записывать простые переменные через лямбду: var_name = lambda x:[ n for n in globals() if id(globals()[n]) == id(x) ][0] , но тут не прошло.
9 авг 2015 в 12:03
Ваше решение выглядит несколько чужеродно для Python. Попробуйте описать Вашу задачу (не решение). Также, пожалуйста, укажите входные данные, по которым Вы планируете идентифицировать переменную.
9 авг 2015 в 12:18
@soon ,нашёл решение: pastebin.com/Xay6d02N
9 авг 2015 в 12:39
В таком случае, Вы можете оформить его как ответ на ru.SO
9 авг 2015 в 12:49
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Имя переменной можно получить, например, следующим образом:
var1 = [] for name, value in list(locals().items()): if var1 is value: print(name)
Но есть и подводные камни, связанные с оптимизацией:
var1 = "A long time ago in a galaxy far, far away…" var2 = "A long time ago in a galaxy far, far away…" for name, value in list(locals().items()): if var1 is value: print(name)
var2 var1
То есть одному объекту в памяти может соответствовать более одного имени.
С использованием модуля inspect можно оформить это в виде функции:
import inspect def get_variable_name(var): return [name for name, value in inspect.currentframe().f_back.f_locals.items() if value is var]
Отслеживать
ответ дан 22 дек 2015 в 13:51
user194374 user194374
locals() — это локальное пространство имён, оно не включает имена из охватывающих областей. Даже без всякой оптимизации, объект может иметь разное кол-во имён, например, если объект принадлежит какому-нибудь контейнеру, типа списка в Питоне, то у него может вообще не быть обычного имени, например, L[0] = L[1] = [] : в данном случае пустой список ( [] ) доступен как L[0] , так и L[1] , но у него нет простого имени (идентификатора) вроде xyz . inspect.currentframe() может не работать на других реализациях Питона.
22 дек 2015 в 20:01
- python
- list
10 трюков для мастеров Python
На первый взгляд Python может показаться простым языком, который любой может освоить, и многих удивляет, какого мастерства можно достичь в этом языке. Python один из тех языков, которые легко изучить, но крайне трудно добиться совершенства. В Python зачастую существует множество способов сделать что-то, но так же легко допустить ошибку. К примеру, можно заново изобрести стандартную библиотеку, потратив кучу времени просто потому, что вы и не подозревали о существовании модуля.
К сожалению, стандартная библиотека Python необъятна, и вдобавок её экосистема ужасающе огромна. Существует около двух миллионов гигабайт модулей Python, однако есть несколько практичных приёмов в работе со стандартной библиотекой и пакетами, обычно связанными с научными вычислениями в Python.
№1: Переворачивание строки
Хоть это и выглядит довольно просто, переворачивание строки с помощью литерного цикла может быть утомительным и раздражающим. К счастью, в Python есть встроенная операция для осуществления именно этой задачи — просто обращаемся к индексу ::-1 строки.
Python Массивы
Примечание: На этой странице показано, как использовать СПИСКИ в качестве МАССИВОВ, однако для работы с массивами в Python вам придется импортировать библиотеку, например NumPy..
Массивы используются для хранения нескольких значений в одной переменной:
Пример
Создайте массив, содержащий названия автомобилей:
cars = [«Ford», «Volvo», «BMW»]
Что такое массив?
Массив — это специальная переменная, которая может содержать более одного значения одновременно.
Если у вас есть список элементов (например, список названий автомобилей), хранение автомобилей в отдельных переменных может выглядеть так:
car1 = «Ford»
car2 = «Volvo»
car3 = «BMW»
Однако что, если вы хотите перебрать все машины и найти конкретную? А если бы у вас было не 3 машины, а 300?
Решение представляет собой массив!
Массив может содержать множество значений под одним именем, и вы можете получить доступ к значениям, обратившись к порядковому номеру.
Доступ к элементам массива
Вы обращаетесь к элементу массива, обращаясь к номеру индекса.
Пример
Получить значение первого элемента массива:
Пример
Измените значение первого элемента массива:
cars[0] = «Toyota»
Длина массива
Используйте метод len() чтобы вернуть длину массива (количество элементов в массиве).
Пример
Вернуть количество элементов в массиве cars:
x = len(cars)
Примечание: Длина массива всегда на единицу больше, чем самый высокий индекс массива.
Цикл элементов массива
Вы можете использовать цикл for in для перебора всех элементов массива.
Пример
Выведите каждый элемент массива cars:
for x in cars:
print(x)
Добавление элементов массива
Вы можете использовать метод append() для добавления элемента в массив.
Пример
Добавьте еще один элемент в массив cars:
cars.append(«Honda»)
Удаление элементов массива
Вы можете использовать метод pop() для удаления элемента из массива.
Пример
Удалите второй элемент массива cars:
Вы также можете использовать метод remove() для удаления элемента из массива.
Пример
Удалите элемент, который имеет значение «Volvo»:
cars.remove(«Volvo»)
Примечание: Метод remove() удаляет только первое вхождение указанного значения.
Методы массива
В Python есть набор встроенных методов, которые вы можете использовать для списков/массивов.
| Метод | Описание |
|---|---|
| append() | Добавляет элемент в конец списка |
| clear() | Удаляет все элементы из списка |
| copy() | Возвращает копию списка |
| count() | Возвращает количество элементов с указанным значением |
| extend() | Добавить элементы списка (или любого итерируемого) в конец текущего списка |
| index() | Возвращает индекс первого элемента с указанным значением |
| insert() | Добавляет элемент в указанную позицию |
| pop() | Удаляет элемент в указанной позиции |
| remove() | Удаляет первый элемент с указанным значением |
| reverse() | меняет порядок списка на обратный |
| sort() | Сортирует список |
Примечание: Python не имеет встроенной поддержки массивов, но вместо этого можно использовать списки Python.
Циклы со списками в Python
В статье про «Операции со списками» мы разобрали, как составить простой список, и научились работать с отдельными его элементами. В этой главе узнаем, как выполнить цикл по всему списку, независимо от его длины, используя всего несколько строк кода. Циклы позволяют выполнять одно и то же действие или набор действий с каждым элементом в списке. В результате вы сможете эффективно работать со списками любой длины, в том числе с тысячами или даже миллионами элементов.
Цикл по всему списку
Часто необходимо просмотреть все записи в списке, выполняя одну и ту же задачу с каждым элементом. Например, в игре вам может потребоваться переместить каждый элемент на экране на одинаковую величину, или в списке чисел вы можете выполнить одну и ту же статистическую операцию для каждого элемента. Или, возможно, нужно отобразить каждый заголовок из списка статей на веб-сайте. Если выполнить одно и то же действие с каждым элементом в списке, можно использовать цикл «for» в Python.
Допустим, у нас есть список имен фокусников, и мы хотим распечатать каждое имя в списке. Мы могли бы сделать это, извлекая каждое имя из списка по отдельности, но такой подход может вызвать несколько проблем. Выводить имена по одному было бы не практично, особенно с длинным списком имен. Кроме того, нам придется менять наш код каждый раз, когда изменяется длина списка. Цикл «for» позволяет избежать этих проблем, позволяя Python самостоятельно решать такую задачу. Давайте использовать цикл for, чтобы распечатать каждое имя в списке магов:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician)
Сначала начинаем с определения списка, как мы это делали вводной статье про списки. Затем мы определяем цикл «for». Эта строка говорит Python вытащить имя из списка и сохранить его в переменной «magician». Затем мы говорим Python вывести имя, которое было только что сохранено в переменной «magician». Затем Python повторяет действие по одному разу для каждого имени в списке. Вывод данных представляет собой простой вывод каждого имени в списке:
alice david carolina
Детальный взгляд на циклы
Концепция использования циклов важна, потому что это один из самых распространенных способов, которыми компьютер автоматизирует повторяющиеся задачи. Например, в простом цикле, который мы использовали в прошлом примере, Python сначала читает первую строку цикла:
for magician in magicians:
Эта строка указывает Python извлечь первое значение из списка и сохранить его в переменной magician. Это первое значение — «alice». Затем Python читает следующую строку:
print(magician)
Python выводит текущее значение, которое является значение «alice». Так как список содержит больше значений, Python возвращается к первой строке цикла:
for magician in magicians:
Python получает следующее значение в списке, «david», и сохраняет это значение в переменной и выполняет строку:
print(magician)
Python снова выводит текущее значение в переменной magician, которое является «david». Python повторяет весь цикл еще раз с последним значением в списке, «carolina». Так как в списке больше нет значений, Python переходит на следующую строку в программе. В этом случае после цикла «for» ничего не приходит, поэтому программа просто завершается.
Когда вы впервые используете циклы, имейте в виду, что набор шагов повторяется один раз для каждого элемента в списке, независимо от того, сколько элементов в списке. Если в вашем списке есть миллион элементов, Python повторяет эти шаги миллион раз — и обычно очень быстро.
Также помните, что при написании собственных циклов «for» вы можете выбрать любое имя для временной переменной, которая содержит каждое значение в списке. Следует знать, что следует выбрать значимое имя, представляющее один элемент из списка. Например, вот хороший способ запустить цикл «for» для списка кошек, списка собак и общего списка элементов:
for cat in cats: for dog in dogs: for item in list_of_items:
Подобное назначение имён могут помочь вам следить за действиями, выполняемыми над каждым элементом в цикле for. Использование имен единственного и множественного числа может помочь вам определить, работает ли раздел кода с одним элементом из списка или со всем списком.
Возможности использования циклов
Вы можете делать что угодно с каждым элементом в цикле for. Давайте переделаем немного предыдущий пример, сделав вывод сообщения каждому из списка, сообщив им, что они выполнили замечательный трюк:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician.title() + ", that was a great trick!")
Единственное отличие в этом коде состоит в том, что мы составляем сообщение каждому из списка, начиная с его имени. В первый раз в цикле значение magician = «Aice», поэтому Python запускает первое сообщение с именем ‘Alice’. Затем выводится сообщение начнется с «david», потом сообщение начнется с «Carolina». Выводим сообщение для каждого имени в списке:
Alice, that was a great trick! David, that was a great trick! Carolina, that was a great trick!
Можно написать столько строк кода, сколько захотите в цикле for. Каждая строка с отступом, следующая за строкой «for magician in magicians», рассматривается внутри цикла, и каждая строка с отступом выполняется один раз для каждого значение в списке. Поэтому вы можете выполнять вывод столько, сколько в этом есть необходимости с каждым значением в списке. Давайте добавим вторую строку к нашему сообщению, сообщая каждому имени из списка, что мы с нетерпением ждем его следующего трюка:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician.title() + ", that was a great trick!") print("I can't wait to see your next trick, " + magician.title() + ".\n")
Так как мы выделили два операторы вывода данных, каждая строка будет выполнена один раз для каждого имени в списке. Новая строка («\n») во втором операторе вывода данных содержит пустую строку после каждого прохождения цикла. Это создает набор сообщений, которые аккуратно сгруппированы для каждого человека в списке:
Alice, that was a great trick! I can't wait to see your next trick, Alice. David, that was a great trick! I can't wait to see your next trick, David. Carolina, that was a great trick! I can't wait to see your next trick, Carolina.
Можно использовать столько строк, сколько хотите в своих циклах for. На практике бывает полезно выполнять ряд различных операций с каждым элементом в списке, когда вы используете цикл for.
Действия после использования циклов
Что происходит после завершения цикла for? Обычно можно обобщить блок вывода или перейти к другим действиям, которые должна выполнять программа.
Любые строки кода после цикла for, которые не имеют отступов, выполняются один раз без повторения. Давайте напишем благодарность всем в нашем списке, например, поблагодарив их за прекрасное шоу. Чтобы отобразить это групповое сообщение после того, как все отдельные сообщения были выведены, мы помещаем благодарственное сообщение после цикла for без отступа:
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician.title() + ", that was a great trick!") print("I can't wait to see your next trick, " + magician.title() + ".\n") print("Thank you, everyone. That was a great magic show!")
Первые два оператора печати повторяются один раз для каждого имени в списке, как вы видели ранее. Однако, поскольку строка дальше не имеет отступа, она печатается только один раз:
Alice, that was a great trick! I can't wait to see your next trick, Alice. David, that was a great trick! I can't wait to see your next trick, David. Carolina, that was a great trick! I can't wait to see your next trick, Carolina. Thank you, everyone. That was a great magic show!
Когда обрабатываются данные с помощью цикла for, вы обнаружите, что это хороший способ подвести итог операции, которая была выполнена для всего набора данных. Например, вы можете использовать цикл for для инициализации игры, просматривая список персонажей и отображая каждого персонажа на экране. После этого вы можете написать блок с отступом, который отображает кнопку «Воспроизвести сейчас» после того, как все данные выведены на экран.
Циклы со срезом данных в списке
В статье про дополнительные операции со списками мы узнали, как можно работать со срезами данных. Также следует отметить, что можно производить цикл «for» в срезе списка в случаях, когда необходимо выбрать какие-либо элементы в нём и произвести последующие операции с данными. В следующем примере мы перебираем циклом первых трех игроков и выводим их имена как часть простого списка:
players = ['charles', 'martina', 'michael', 'florence', 'eli'] print("Here are the first three players on my team:") for player in players[:3]: print(player.title())
Вместо того, чтобы просматривать весь список игроков, Python просматривает только первые три имени и выводит их:
Here are the first three players on my team: Charles Martina Michael
Работа с определёнными данными в списках очень необходимо в ряде ситуаций. Например, когда вы создаете игру, можно сохранять окончательный счет игрока в список каждый раз, когда он завершает игру. Затем можно получить три лучших результата игрока, отсортировав список по убыванию и выбрав срез, включающий только первые три результата. Когда вы работаете с данными, вы можете использовать срезы для обработки данных в блоках определенного размера. Или, когда вы создаете веб-приложение, вы можете использовать срезы для отображения информации в серии страниц с соответствующим количеством информации на каждой странице.
Примечание
Основная статья: Циклы со словарями в Python
В этой статье мы детально познакомились с использованием циклов в списках, которые применяются во время программирования игр, приложений и других программ. Далее можно изучить, как применяются циклы со словарями в Python, что также полезно. Если же есть вопросы, комментарии, иные сообщения, то оставляйте их на странице обсуждения.
Другие статьи о Python
Язык программирования Python
- Операции со строкой
- Операции со списками
- Дополнительные операции со списками
- Операции со словарями
- Циклы
- Циклы со списками
- Дополнительные операции со словарями
- Ввод данных
- Условные операторы
- Циклы со словарями
- Функции
- Классы
- Работа с файлами в Python
- Тестирование кода в Python
