Уведомления

Группа в Telegram: @pythonsu

#1 Март 19, 2018 20:11:29

ursusbrown
Зарегистрирован: 2018-03-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл для перебора элементов по списку по 3 элемента за обход

Всем привет. Изучаю pythоn около месяца, я самоучка.

Не могу решить задачу уже 2 часа, ломаю голову.
У меня есть список:

 list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
Мне нужно создать цикл, для каждых трех элементов из списка.
Т.е, мне нужнен цикл, который будет производить действие для трех элементов за обход.

Если конкретнее, на примере, то у меня есть база телефонных номеров.
Цикл, должен брать по 3 номера, производить действие с этими тремя номерами.
И добавлять эти номера в другой, отработанный список.
Затем брать следующие 3 номера.
И так далее.

Буду очень рад вашей помощи.

Офлайн

#2 Март 19, 2018 20:41:28

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Цикл для перебора элементов по списку по 3 элемента за обход

список - это объект который поддерживает итерационный протокол

 >>> l = [1, 2, 3]
>>> i = iter(l)
>>> next(i)
1
>>> next(i)
2
>>> next(i)
3
>>> next(i)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

вы можете написать свой генератор, который будет производить нужный вам результат
 >>> def foo(a):
...     i = 0
...     while i < a:
...         yield i
...         i += 1
... 
>>> for v in foo(5):
...     print(v)
... 
0
1
2
3
4
>>> 
Используя эти два приема можно решить вашу задачу



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 19, 2018 21:28:50

ursusbrown
Зарегистрирован: 2018-03-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл для перебора элементов по списку по 3 элемента за обход

JOHN_16
список - это объект который поддерживает итерационный протокол
Ура! Решение)
Я глубоко признателен вам за ответ.
Желаю вам добра и процветания.

Офлайн

#4 Март 19, 2018 23:29:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Цикл для перебора элементов по списку по 3 элемента за обход

  
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> 
>>> while lst:
...     print(lst[:3])
...     lst = lst[3:]
... 
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10, 11, 12]
[13, 14]
>>>



Офлайн

#5 Март 20, 2018 11:04:12

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Цикл для перебора элементов по списку по 3 элемента за обход

без изменения начального списка

 >>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14]
>>> for i in range(0,len(lst),3):
	print(lst[i:i+3])
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10, 11, 12]
[13, 14]
>>>

Офлайн

#6 Март 20, 2018 11:49:59

clipper1995
Зарегистрирован: 2018-03-19
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл для перебора элементов по списку по 3 элемента за обход

Решение py.user.next , marvellik проще для данной задачи. Суть в том, что извлечение среза по несуществующему индексу не вызывает исключение.

Если в задаче требуется часто во многих местах извлекать из последовательностей n-ное количество элементов, то более хорошим стилем будет подход как у JOHN_16. Можно написать ф-ю генератор, которой можно передать последовательность, и количество возвращаемых элементов за одну итерацию - в качестве параметра.

Отредактировано clipper1995 (Март 20, 2018 11:51:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version