Прохождение цикла по списку
Как можно пройтись по нему циклом, но, при этом, нужно, чтобы (‘Броня’, [2, 0.6747547826210327]) считалось за один элемент, и в цикле можно было взаимодействовать по типу data[0], #Броня data[1] #[2, 0.6747547826210327] Моя попытка не увенчалась успехом, он проходит по каждому отдельно.
Отслеживать
25k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
задан 17 авг 2020 в 13:08
833 8 8 серебряных знаков 30 30 бронзовых знаков
Пройдите список в обратном порядке в Python
В этом посте будет обсуждаться, как пройти список в обратном порядке в Python, не изменяя исходный список.
1. Использование встроенного reversed() функция
Вы можете передать список встроенной функции reversed() , который возвращает обратный итератор и не изменяет список.
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for x in reversed ( a ) :
Если вам нужны индексы, используйте enumerate() функция для получения индекса позиции и соответствующего значения.
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for i , v in reversed ( list ( enumerate ( a ) ) ) :
print ( i , v )
Другой способ итерации с индексами может быть выполнен следующим образом:
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for i in range ( len ( a ) — 1 , — 1 , — 1 ) :
print ( i , a [ i ] )
2. Использование расширенной нарезки
The [::-1] slice создает копию списка в обратном порядке, которую можно использовать в цикле for для печати элементов в обратном порядке.
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for x in a [ :: — 1 ] :
Вот и все, что касается обхода списка в обратном порядке в Python.
Оценить этот пост
Средний рейтинг 4.92 /5. Подсчет голосов: 12
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
0 Комментарии
Встроенные отзывы
Просмотреть все комментарии
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
Как заставить цикл while проверять каждый элемент списка
Здравствуйте! Передо мной стоит задача составить список, содержащий все целые числа от 1 до 100, затем найти все целые числа из списка, которые делятся на 7, но не кратны 5, и сохранить их в отдельном списке.(используя только цикл while)
Но я уже битый час сижу и не могу понять, как мне сделать так, чтобы цикл while проверял каждую цифру в списке our_list и в случае удовлетворения условия (цифра делится на 7 и не кратна 5, выдавал мне эти числа. Меня интересует то, как заставить цикл конкретно пройтись с проверкой по всему списку. Я так понимаю, что в последствии нужно использовать метод .append к полученному новому списку чисел, но на данный момент я в ступоре из-за непонимания как заставить while проверять каждую цифру в списке и выдать мне нужные числа.
Вот до чего в данный момент додумалась моя голова (да, практически ничего)
1 2 3 4 5 6 7
our_list = list(range(1,101)) element = new_list = [] while element / 7 and element % 5 != 0: print('done') break
P.S
Не ругайтесь на меня пожалуйста за, возможно, глупые вещи) Изучаю программирование буквально пару недель от силы.
Пишем красивый идиоматический Python
Иногда сложно найти в Сети правильные, а главное актуальные «best practices» для языка. Документация, конечно же, содержит всю необходимую информацию, но отсеять нужную вещь в абзацах подробного (на то она и документация) описания довольно сложно. Но недавно мне улыбнулся поиск Google, и я наткнулся на очень полезные «паттерны» языка Python от одного из core разработчиков — Raymond Hettinger.
Примечание: Все рекомендации даны в нескольких вариантах: сначала идут самые «плохие» варианты, а дальше предлагается лучшая альтернатива. Актуально для версии языка 2.7, отличия для версии 3.3 читайте в примечаниях к конкретному «паттерну».
Цикл по массиву из чисел
Плохо: иногда пишут так.
for i in [0, 1, 2, 3, 4, 5]: print i**2
Хорошо: лучший, с генератором. Но в 32 битной системе список из миллиона чисел будет занимать ~ 32 mb памяти.
for i in range(6): print i**2
Отлично: самый лучший вариант. В отличии от второго xrange возвращает только одно значение за раз, и не нужно лишнюю память для хранения всего массива.
for i in xrange(6): print i**2
Примечание: В версии Python 3.3 xrange уже в ядре и называеться просто range .
Цикл по списку
Плохо: часто бывшие С программисты пишут так.
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print colors[i]
Хорошо: лучший вариант.
colors = ['red', 'green', 'blue', 'yellow'] for color in colors: print color
Но если нужно пройти по списку задом на перед?
Плохо: опять, прошло из C дает о себе знать:
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)-1, -1, -1): print colors[i]
Хорошо: но в Python пишут вот так:
colors = ['red', 'green', 'blue', 'yellow'] for color in reversed(colors): print color
Цикл по списку с индексами
Плохо тоже что и выше.
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print i, '-->', colors[i]
Хорошо: более элегантный вариант:
colors = ['red', 'green', 'blue', 'yellow'] for i, color in enumerate(colors): print i, '-->', color
Цикл по двум спискам
Плохо тоже что и выше.
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] n = min(len(names), len(colors)) for i in range(n): print names[i], '-->', colors[i]
Хорошо: с двух списков делаем один список кортежей. Проблема в том что zip использует больше памяти чем первый вариант.
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in zip(names, colors): print name, '-->', color
Отлично: в отличии от zip , izip использует кэширование, что помогает существенно сэкономить память.
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in izip(names, colors): print name, '-->', color
Примечание: В версии Python 3.3 izip вписан в ядро и называется просто zip .
Сортировка списка по алгоритму
Плохо: используя функцию для сравнения.
colors = ['red', 'green', 'blue', 'yellow'] def compare_length(c1, c2): if len(c1) < len(c2): return -1 if len(c1) >len(c2): return 1 return 0 print sorted(colors, cmp=compare_length)
Хорошо: используя сортировку по ключу. Использует намного меньше памяти.
colors = ['red', 'green', 'blue', 'yellow'] print sorted(colors, key=len)
Примечание: Метод cmp убран с ядра Python 3.x.
Цикл по ключам словаря
Обычный способ возвращает ключи. При таком цикле происходит итерация словаря, поэтому в процессе его изменять нельзя.
for k in d: print k
Для изменения словаря в цикле используйте цикл по ключам (Пример: удаление всех ключей начинающихся с R ):
for k in d.keys(): if k.startswith('R'): del d[k]
В этом случае d.keys() делает копию ключей словаря, что позволяет нам свободно работать с оригинальной структурой.
Цикл по ключам и значением словаря
Плохо: цикл по ключам и возвращение значение по последним. Медленный способ:
for k in d: print k, '-->', d[k]
Хорошо: быстрее делать цикл по значениях:
for k, v in d.items(): print k, '-->', v
Отлично: Но самый лучший и быстрый способ это использовать итератор:
for k, v in d.iteritems(): print k, '-->', v
Соединение двух списков в один словарь
Очень быстрый метод, используется только один кортеж для генерации словаря.
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue'] d = dict(izip(names, colors)) # d будет иметь следующее значение: #
Подсчет элементов в словаре
Плохо: обычный способ:
colors = ['red', 'green', 'red', 'blue', 'green', 'red'] d = <> for color in colors: if color not in d: d[color] = 0 d[color] += 1 #
Хорошо: использует функцию get() :
colors = ['red', 'green', 'red', 'blue', 'green', 'red'] d = <> for color in colors: d[color] = d.get(color, 0) + 1
Отлично: самый продвинутый способ это использовать defaultdict() . Но вы должны знать как он работает.
d = defaultdict(int) for color in colors: d[color] += 1
Группирование элементов списка
Плохо: если нужно сгруппировать элементы списка по некоторому признаку (в примере — длина строки) часто используют такой метод:
names = ['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie'] d = <> for name in names: key = len(name) if key not in d: d[key] = [] d[key].append(name)
Хорошо: но есть способ гораздо элегантней и быстрее:
d = defaultdict(list) for name in names: key = len(name) d[key].append(name)
Итог
На сегодня все. Надеюсь эти тривиальные, но полезные примеры помогут кому-то улучшить свой код, как они помогли это сделать мне. Их автором является Raymond Hettinger (@raymondh), Python Core Developer.
UPD: Видео доклада на PyCon 2013, с которого были взяты примеры кода: http://youtu.be/OSGv2VnC0go (на английском), содержит еще очень много интересной информации не перенесенной в статью, а также юмор и харизму докладчика.
- python 2.7
- best practices
