Как и большинство программистов, вы знаете, что после создания массива, вам нужно написать цикл для его обработки. С этим нет никаких проблем, но иногда нам не нужно использовать несколько строк для написания полного цикла for для одной простой задачи. К частью, Python это понимает и предоставляет замечательный инструмент для использования в таких ситуациях. Этот инструмент называется генератор списка (list comprehensions, списковое включение).
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Что это за зверь?
Списковое включение (List comprehensions) – это списки, которые генерируются с циклом for внутри. Они очень распространены в Python и выглядят примерно следующим образом:
[thing for thing in list_of_things] |
Возможно, вы еще сильнее запутались, так что сделаем шаг назад. Список содержит в себе множество вещей, но определяется между квадратными скобками. Скажем, мне нужно получить функцию, которая удваивает значения всех чисел в списке. Для начала, мне нужно создать список чисел.
Теперь создадим функцию. Назовем ее list_doubler
, так как это именно то, что она делает, и она будет принимать аргумент, который является списком, который мы будем удваивать.
def list_doubler(lst): doubled = [] for num in lst: doubled.append(num*2) return doubled |
Вызов этой функции даст нам новый список с удвоенными элементами.
my_doubled_list = list_doubler(lst) |
my_doubled_list
теперь содержит значения 42
, 4
и 186
. Эта функция простая и делает то, что нам нужно простым способом, но это пять строк, учитывая определяющую строку. Также есть переменная, с которой мы ничего не делаем, кроме как добавляем и в конце возвращаем её.
Единственная часть функции, которая по-настоящему работает – это цикл for. Цикл for тоже мало что делает, просто умножает число на 2. Это идеальный кандидат для превращения в списковое включение.
Создание спискового включения
Давайте сохраним его как функцию, которую мы будем вызывать. Нам нужно только упростить тело функции. Так как списковое включение создает списки, а списки могут быть назначены к переменным, примем это во внимание и расположим списковое включение справа от doubled
и продолжим.
doubled = [thing for thing in list_of_things] |
Хорошо, теперь нам нужно заполнить правую сторону. Как и с нормальным циклом for, а правая часть списка выглядит именно так, нам нужно назвать элементы в нашем цикле. Сначала, назовем каждый объект, и мы также будем использовать переменную списка, которая будет передана.
doubled = [thing for num in lst] |
Это не может работать в полной мере, так как элемент не является… элементом. В нашей изначальной функции мы выполнили num * 2
, так что давайте сделаем это еще раз.
doubled = [num * 2 for num in lst] |
Все что находится перед циклом for
точно внесено в список. Наконец, нам нужно вернуть наш новый список.
def list_doubler(lst): doubled = [num * 2 for num in lst] return doubled |
Запускаем нашу новую функцию.
my_doubled_list = list_doubler([12, 4, 202]) |
И да, my_doubled_list
содержит ожидаемые значения 24
, 8
и 404
. Отлично, все работает! Но так как мы создаем и моментально возвращаем переменную, давайте просто применим списковое включение напрямую.
def list_doubler(lst): return [num * 2 for num in lst] |
Хорошо, отлично, но зачем мне это нужно?
Списковые включения (генератор списка, list comprehensions) отлично подходят для случаев, когда нам нужно сохранить немного места в коде. Они также удобны в случаях, когда вам просто нужно быстро обработать списки, чтобы сэкономить время над рутинной работой с этим списком.
Они также очень полезны, если вы хотите больше узнать о функциональном программировании, но эту тему мы обсудим в будущем.
Применяем условие if в список
Давайте сделаем новую функцию, которая будет давать только длинные слова из списка. Скажем, каждое слово, которое состоит более чем из 5 букв, будет считаться длинным. Для начала пропишем их вручную.
def long_words(lst): words = [] for word in lst: if len(word) > 5: words.append(word) return words |
Мы создали переменную для хранения наших слов, применяем цикл над всеми словами в нашем списке, и проверяем длинну каждого слова. Если оно длиннее 5 букв, мы вносим слово в список, и затем, наконец, мы отсылаем список назад. Давайте попробуем.
long_words(['blog', 'Treehouse', 'Python', 'hi'])
возвращает ['Treehouse', 'Python']
. Это как раз то, чего мы и ожидали.
Хорошо, давайте перепишем это в списковое включение. Для начала, построим то, что мы и так знаем.
def long_words(lst): return [word for word in lst] |
Это возвращает нам все слова, не только те, которые длиннее 5 букв. Мы вносим условный оператор в конец цикла for.
def long_words(lst): return [word for word in lst if len(word) > 5] |
Итак, мы использовали всё то же условие if, но поместили его в конец спискового включения. Оно использует то же наименование переменной, которое мы используем для элементов в списке.
Хорошо, давайте опробуем эту версию long_words(['list', 'comprehension', 'Treehouse', 'Ken'])
возвращает ['comprehension', 'Treehouse']
.
Примеры
1. Возводим в квадрат все числа от 1 до 9. Применяем функцию range.
[x**2 for x in range(10)] |
Результат:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] |
2. Все цифры которые делятся на 5 без остатка, в диапазоне от 0 до 100.
[x for x in range(100) if x%5 == 0] |
Результат:
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95] |
3. Все цифры которые делятся на 3 и 6 без остатка, в диапазоне от 0 до 50.
[x for x in range(50) if x%3 == 0 and x%6 != 0] |
Результат:
[3, 9, 15, 21, 27, 33, 39, 45] |
4. Первая буква из каждого слова предложения.
phrase = «Тестовое сообщение из мира Python для сообщества.» print([w[0] for w in phrase.split()]) |
Результат:
[‘Т’, ‘с’, ‘и’, ‘м’, ‘P’, ‘д’, ‘с’] |
5. Заменяем букву А
в каждом слове на #
.
phrase = «АБАЖУР, АБАЗИНСКИЙ, АБАЗИНЫ, АББАТ, АББАТИСА, АББАТСТВО» print(».join([letter if letter != ‘А’ else ‘#’ for letter in phrase])) |
Результат:
#Б#ЖУР, #Б#ЗИНСКИЙ, #Б#ЗИНЫ, #ББ#Т, #ББ#ТИС#, #ББ#ТСТВО |
Итоги
Надеюсь это руководство помогло вам понять простой способ экономии кода , который вам нужно написать для получения конкретной готовой работы с вашими списками.
Старайтесь сохранять ваши списковые включения короткими, а условия if – простыми. Несложно разглядеть решение многих ваших проблем в списковых включениях и превратить их в огромный беспорядок.
Если это только распалило ваш аппетит, посмотрим, сможете ли вы разобраться со словарными включениями самостоятельно. Они используют конструкторы dict, {:} , но они довольно похожи. Вы также можете проработать установочные включения. Также ознакомьтесь с функциональным программированием в Python, если считаете себя готовым.
Больше примеров
- https://www.python.org/dev/peps/pep-0289/
- https://legacy.python.org/dev/peps/pep-0274/
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
Filters
Filter synonyms by Letter
A B C D F H I J L O P R S T U
Filter by Part of speech
phrase
adjective
phrasal verb
noun
Suggest
If you know synonyms for In line with, then you can share it or put your rating in listed similar words.
Suggest synonym
Menu
In line with Thesaurus
External Links
Other usefull sources with synonyms of this word:
Synonym.tech
Thesaurus.com
Collinsdictionary.com
Photo search results for In line with
Image search results for In line with
Cite this Source
- APA
- MLA
- CMS
Synonyms for In line with. (2016). Retrieved 2023, April 13, from https://thesaurus.plus/synonyms/in_line_with
Synonyms for In line with. N.p., 2016. Web. 13 Apr. 2023. <https://thesaurus.plus/synonyms/in_line_with>.
Synonyms for In line with. 2016. Accessed April 13, 2023. https://thesaurus.plus/synonyms/in_line_with.
I have a dictonary like
list1={'ab':10,'ba':20,'def':30}.
Now my input file contains :
ab def
ba ab
I have coded:
filename=raw_input("enter file:")
f=open(filename,'r')
ff=open(filename+'_value','w')
for word in f.read().split():
s=0
if word in list1:
ff.write(word+'t'+list1[word]+'n');
s+=int(list1[word])
else:
ff.write(word+'n')
ff.write("n"+"total:%d"%(s)+"n")
Now I want my output file to contain:
ab 10
def 30
total: 40ba 20
ab 10
total: 30
Am not able to loop it for each line. How should I do it? I tried a few variations using f.readlines(), f.read(), and tried looping once, then twice with them. But I cannot get it right.
asked Jun 13, 2014 at 10:19
charvicharvi
2111 gold badge5 silver badges15 bronze badges
6
Instead of giving the answer right away, Let me give you a gist of what you ask:
To read the whole file:
f = open('myfile','r')
data = f.read()
To loop through each line in the file:
for line in data:
To loop through each word in the line:
for word in line.split():
Use it wisely to get what you want.
answered Jun 13, 2014 at 10:35
Aswin MurugeshAswin Murugesh
10.7k10 gold badges39 silver badges69 bronze badges
You need to make 2 loops and not only one:
filename = raw_input("enter file:")
with open(filename, 'r') as f, open(filename + '_value','w') as ff:
# Read each line sequentially
for line in f.read():
# In each line, read each word
total = 0
for word in line.split():
if word in list1:
ff.write("%st%sn" % (word, list1[word]))
total += int(list1[word])
else:
ff.write(word+'n')
ff.write("ntotal: %sn" % total)
I have also cleaned a little bit your code to be more readable. Also see What is the python «with» statement designed for? if you want to understand the with
block
answered Jun 13, 2014 at 10:28
Maxime LorantMaxime Lorant
33.9k19 gold badges86 silver badges96 bronze badges
5
with open("in.txt","r") as f:
with open("out.txt","w") as f1:
for line in f:
words = line.split() # split into list of two words
f1.write("{} {}n".format((words[0]),list1[words[0]])) # write first word plus value
f1.write("{} {}n".format((words[1]),list1[words[1]])) # second word plus value
f1.write("Total: {}n".format((int(list1[words[0]]) + int(list1[words[1]])))) # finally add first and second and get total
answered Jun 13, 2014 at 10:42
Prepositions after «in-line»
In 93% of cases in-line with is used
Generally it is in-line with the torso.
Your hips are in-line with your shoulders.
This is in-line with the category standard.
The results are in-line with what most people would expect and no real surprises here.
But as I said I think it will just be in-line with the overall reduction in allocation.
This is in-line with what Lucas told Hamill all the way back in 1976 while filming ANH.
VL-bus is physically in-line with the ISA or EISA connector, thus all (E) ISA signals are available to VL boards.
Current Trading and Outlook Since the end of the half year, trading has continued to be in-line with expectations.
However, the picture they offer seems more in-line with the situation of the eighties than with that of the nineties.
At first, the mice were to rescue a political prisoner, which, believe it of not, is in-line with the original books.
In 4% of cases in-line for is used
It can even position you in-line for a job promotion.
Some people that are going to be in-line for a new iPhone 5, or whatever they call it, have been buying Apple phones since the first generation arrived.
If you’re a frequent or occasional visitor to the Maples Arena, or Red River Community Centre you’ll be glad to hear the two facilities are in-line for some improvements.
In 1% of cases in-line inside is used
Determine your focus on collection and then make certain all vital components of the body are in-line inside a parallel style for the collection.
In 1% of cases in-line on is used
I notice too that the vacuum and steam heating pipes appear to be in-line on the same side, bit unusual that.
In 1% of cases in-line to is used
And the day came when we are in-line to checked in the Disney Dream Cruise.
I fully understand the frustration and as an immigrant I worked with odd jobs that were not in-line to my engineering.
- in accord with
- in accordance with
- in agreement with
- conforming to
- in consonance with
- in keeping with
- in the manner of
- as reported by
- as stated in
- just as
- pursuant to
- to the degree that
Roget’s 21st Century Thesaurus, Third Edition Copyright © 2013 by the Philip Lief Group.
On this page you’ll find 17 synonyms, antonyms, and words related to in line with, such as: harmonious, in agreement, and obedient.
SYNONYM OF THE DAY
OCTOBER 26, 1985
WORDS RELATED TO IN LINE WITH
- as reported by
- as stated in
- conforming to
- in accord with
- in accordance with
- in agreement with
- in consonance with
- in keeping with
- in line with
- in the manner of
- just as
- pursuant to
- to the degree that
- harmonious
- in agreement
- in line with
- obedient
Roget’s 21st Century Thesaurus, Third Edition Copyright © 2013 by the Philip Lief Group.