Найти - Пользователи
Полная версия: Цикл для перебора элементов по списку по 3 элемента за обход
Начало » Python для новичков » Цикл для перебора элементов по списку по 3 элемента за обход
1
ursusbrown
Всем привет. Изучаю pythоn около месяца, я самоучка.

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

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

Буду очень рад вашей помощи.
JOHN_16
список - это объект который поддерживает итерационный протокол
 >>> 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
>>> 
Используя эти два приема можно решить вашу задачу
ursusbrown
JOHN_16
список - это объект который поддерживает итерационный протокол
Ура! Решение)
Я глубоко признателен вам за ответ.
Желаю вам добра и процветания.
py.user.next
  
>>> 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]
>>>
marvellik
без изменения начального списка
 >>> 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]
>>>
clipper1995
Решение py.user.next , marvellik проще для данной задачи. Суть в том, что извлечение среза по несуществующему индексу не вызывает исключение.

Если в задаче требуется часто во многих местах извлекать из последовательностей n-ное количество элементов, то более хорошим стилем будет подход как у JOHN_16. Можно написать ф-ю генератор, которой можно передать последовательность, и количество возвращаемых элементов за одну итерацию - в качестве параметра.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB