Код: Выделить всё
a_list = ['a', 'b', 'c']
for i, x in enumerate(a_list):
print(i, x)
Код: Выделить всё
0 a
1 b
2 c
На данный момент я придумал такое определение списков, которое создает не «генератор», а также список пар:
Код: Выделить всё
let enumerate (a_list: 'a list): (int * 'a) list =
let rec _enumerar (a_list: 'a list) (accum: (int * 'a) list) (i: int): (int * 'a) list =
match a_list with
| [] -> accum
| x::xs -> _enumerar xs ((i, x)::accum) (i+1)
in
_enumerar a_list [] 0 |> List.rev
Код: Выделить всё
# enumerate ['a'; 'b'; 'c'];;
- : (int * char) list = [(0, 'a'); (1, 'b'); (2, 'c')]
А как насчет ленивой версии с использованием Sequence или стрим?
Подробнее здесь: https://stackoverflow.com/questions/726 ... e-function